具有子句MySql的嵌套Aggregate函数

Prawin:

这是我的架构和示例数据:

-- -----------------------------------------------------
-- Table `Music_store`.`customers`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Music_store`.`customers` (
  `customer_id` INT NOT NULL AUTO_INCREMENT,
  `customer_firstname` VARCHAR(45) NOT NULL,
  `customer_lastname` VARCHAR(45) NOT NULL,
  `customer_mobno` VARCHAR(20) NOT NULL,
  `music_store_store_id` INT NOT NULL,
  PRIMARY KEY (`customer_id`),
  INDEX `fk_customers_music_store1_idx` (`music_store_store_id` ASC) VISIBLE,
  UNIQUE INDEX `customer_mobno_UNIQUE` (`customer_mobno` ASC) VISIBLE,
  CONSTRAINT `fk_customers_music_store1`
    FOREIGN KEY (`music_store_store_id`)
    REFERENCES `Music_store`.`music_store` (`store_id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Music_store`.`orders`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Music_store`.`orders` (
  `order_id` INT NOT NULL AUTO_INCREMENT,
  `order_date` DATETIME NOT NULL,
  `ship_amount` INT NOT NULL,
  `tax_amount` INT NOT NULL,
  `ship_date` DATETIME NOT NULL,
  `customers_customer_id` INT NOT NULL,
  PRIMARY KEY (`order_id`),
  INDEX `fk_orders_customers1_idx` (`customers_customer_id` ASC) VISIBLE,
  CONSTRAINT `fk_orders_customers1`
    FOREIGN KEY (`customers_customer_id`)
    REFERENCES `Music_store`.`customers` (`customer_id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

INSERT INTO customers (customer_firstname, customer_lastname, customer_mobno, music_store_store_id)
        VALUES 
("Prasanth", "Pandiselvan", "456-986-1234", 1),
("Dan", "Druar", "347-234-9876", 1),
("Lukeman", "Hakkim", "488-234-0987", 2),
("Paul", "Antony", "356-257-1233", 2),
("Nikhil", "Reddy", "678-234-1345", 3),
 ("Saravana", "Kumar", "456-986-2671", 3),
("Mugil", "Pandian", "877-285-3322", 4);

INSERT INTO orders (order_date, ship_amount, tax_amount, ship_date, customers_customer_id)
        Values
("2020-03-03 22:59:52", "127", 4,  "2020-03-04 22:59:52", 1),
("2020-03-13 22:59:52", "158", 5,  "2020-03-15 22:59:52", 1),
("2020-02-08 22:59:52", "201", 5,  "2020-02-10 22:59:52", 2),
("2020-02-25 22:59:52", "300", 6,  "2020-02-27 22:59:52", 2),
("2020-05-14 22:59:52", "500", 7,  "2020-05-16 22:59:52", 3),
("2020-02-08 22:59:52", "557", 7,  "2020-02-12 22:59:52", 3),
("2020-06-19 22:59:52", "658", 7,  "2020-06-21 22:59:52", 4);

例如,这将是查询的查询结果

select customers.customer_id, count((orders.customers_customer_id)) as mac
from customers inner join orders on customers.customer_id = orders.customers_customer_id
group by orders.customers_customer_id;

结果:

# customer_id, count_of_orders
     '1',         '2'
     '2',         '2'
     '3',         '2'
     '4',         '1'

我想获得订单数量最多的客户。我无法使用MAX(count())。但是我想返回一个或多个具有最大订单数的行。

nbk:

因为您只需要ID,所以不需要加入客户表

SELECT customers_customer_id, COUNT(*) count_r 
FROM orders
GROUP BY customers_customer_id
HAVING count_r = ( 
SELECT MAX(count_r) FROM (SELECT COUNT(*) count_r FROM `orders` GROUP BY customers_customer_id) t1)
customer_customer_id | count_r
--------------------:| ------:
                    1 | 2
                    2 | 2
                    3 | 2

db <> 在这里拨弄

为了从Orders中选择所有想要的列,并且仅仅包含ID(具有最高数量的订单),我必须做两个嵌套的Queries才能获得最高的Orders数量。

  1. 选择曾经的customer_customer_id的订单数量
  2. 因为我只需要最高计数,所以我从第一次选择中收集的所有计数中选择最大值
  3. 我用它来筛选出所有nu7mer最高订单的customer_customer_ids。

HAVING是必需的,因为我必须对count_r列运行“最大数”,而我无法在WHERE子句上执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL具有子句和Count()

在Grafana中使用“具有” MySQL子句

通过具有嵌套对象值的 where 子句查找记录

没有GROUP BY子句的MySQL聚合函数

具有嵌套函数作用域的UnboundLocalError

具有聚合函数MAX的Codeigniter Active Record HAVING子句

Julia语法-具有where子句的函数的返回类型注释

使用具有不同 order by 子句的 postgres 窗口函数

具有开始/处理/结束块的函数中的嵌套函数?

如何调用具有嵌套函数的函数?

在MySQL中选择具有多个WHERE子句的行

MySQL LEFT JOIN在ON子句中具有一列

MySQL具有相关查询的Having子句不起作用

MySQL IN子句中的多个列具有空值

Postgres在具有OVER子句的查询中报告“窗口函数调用需要OVER子句”

具有带有嵌套表表达式的子句的DB2 SQL

带有 WHERE 子句的 Rank() 函数不显示任何 MYSQL

如何编写具有多个字段的mysql查询(在where子句中具有组合)

如何从嵌套选择中指定至少具有x值的where子句

优化具有多个条件的嵌套where子句的最佳方法是什么?

具有条件的嵌套数组的reducer函数

嵌套函数中具有相同名称的变量

嵌套 lapply 以允许调用具有多个输入的函数

为什么where子句仅对具有通用参数的函数有效?

具有多个条件的If子句

SQL具有子句的问题

MySQL - 嵌套外键(具有多个表)

函数具有多个子句,并且还声明默认值。

在具有 DISTINCT 列的 where 子句中无法识别别名 RANK() 函数