SQL GROUP BY与COUNT订单统计查询逻辑理解求助(Coursera课程作业相关)
SQL语句运行逻辑讲解
SQL的实际执行顺序和书写顺序不一致,这段代码的运行步骤按先后优先级排列如下:
- 第一步:执行
FROM Invoices
数据库首先调取Invoices订单表的全量数据,作为后续所有计算的基础数据源。 - 第二步:执行
GROUP BY CustomerId
按客户ID字段CustomerId对所有订单记录做分组,同一个客户的所有订单会被归到同一个分组中,最终生成的分组总数等于表中不同客户的总数量。 - 第三步:执行聚合统计
对每个独立分组单独运行COUNT(InvoiceId)计算:InvoiceId是订单唯一标识,COUNT()函数会统计每个分组内非空的InvoiceId数量,也就是对应客户的有效下单总数,统计结果被别名命名为number_of_orders。 - 第四步:执行
SELECT逻辑
这里的SELECT *会提取每个分组对应客户的所有基础字段,再拼接上第三步统计得到的number_of_orders字段,生成待排序的临时结果表。
补充提示:如果你的数据库开启了严格分组模式,SELECT *会触发语法错误,更符合SQL标准的写法是明确列出要查询的客户维度字段,比如SELECT CustomerId, COUNT(InvoiceId) AS number_of_orders。 - 第五步:执行
ORDER BY number_of_orders DESC
对临时结果表按number_of_orders字段做降序排序,下单数越多的客户排名越靠前,最终输出的结果就完全匹配题目的要求。
内容的提问来源于stack exchange,提问作者Oren
相关产品推荐
相关产品推荐

