Query GROUP BY and COUNT



我是SQL的新手,正在学习COURSERA的"SQL for Data Science";课程我在总结作业中有以下问题:

显示每个客户下的订单数量,并按订单数量降序对结果进行排序

由于没有写出正确的代码,答案如下(当然是几个选项之一(:

SELECT *
,COUNT (InvoiceId) AS number_of_orders
FROM Invoices
GROUP BY CustomerId
ORDER BY number_of_orders DESC

我仍然难以理解查询逻辑。如果您能帮助我理解这个问题,我将不胜感激。

我真的希望Coursera不会给你上面提到的问题作为推荐答案。它不会在大多数数据库上运行,即使在MySQL这样可能运行它的情况下,它也不是完全正确的。你应该使用这个版本:

SELECT CustomerId, COUNT (InvoiceId) AS number_of_orders
FROM Invoices
GROUP BY CustomerId
ORDER BY number_of_orders DESC;

GROUP BY的一个基本规则是,只有出现在GROUP BY子句中的列才可供选择。除了这些列之外,任何列的聚合也可能出现在选择中。我上面给你的版本遵循这些规则,并且符合ANSI,这意味着它可以在任何数据库上运行。

当您说SELECT *时,它表示所有列。但是您只按CustomerId进行分组,这在SQL中是错误的。

指定组部分中要显示的其他列

脚本应该类似

SELECT CustomerName, DateEntered
,COUNT (InvoiceId) AS number_of_orders
FROM Invoices
GROUP BY CustomerId, CustomerName, DateEntered
ORDER BY number_of_orders DESC

最新更新