[英]How to apply different GROUP BY to each aggregate functions in MySql
我有一个简单的问题,但我无法在文档或谷歌中找到答案。 我有一张包含客户信息的表格,另一张包含有关订单的信息。 每个客户都有多个订单。 我需要创建 3 列:一列包含客户 ID,一列包含该客户的订单数,一列包含订单总数。 例子:
客户表
CustomerID | PhoneNumber
____________|____________
AAA | 1-222-2
BBB | 1-333-3
订单表
CustomerID | OrderID
____________|____________
AAA | 1
AAA | 2
BBB | 3
BBB | 4
BBB | 5
预期结果:
Customer ID | Number of orders | Total number of orders
_____________|___________________|_______________________
AAA | 2 | 5
BBB | 3 | 5
当我使用 COUNT(OrderID) 时,我得到订单总数,当我将 COUNT 与 GROUP BY CustomerID 一起使用时,我得到每个客户的订单数,但我无法在同一个表中检索两者。 有没有办法在 MySql 中做到这一点?
这是 MySQL 8+ 使用带有分析功能的单遍查询执行此操作的方法:
SELECT
CustomerID,
COUNT(*) AS num_orders,
SUM(COUNT(*)) OVER () AS total_num_orders
FROM Orders
GROUP BY
CustomerID;
你可以试试这个——
select customerid, count(*) no_of_orders,
(select count(*) from tablename) as total_no_of_orders
from tablename
group by customerid
使用 window function 的另一种方法:
SELECT A.*, SUM(CUSTOMER_WISE_COUNT) OVER(ORDER BY CUSTOMERID ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM (
SELECT COUNT(*) CUSTOMER_WISE_COUNT, CUSTOMERID FROM CUSTOMERS GROUP BY CUSTOMERID) A
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.