我是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