【问题标题】:Query GROUP BY and COUNT查询 GROUP BY 和 COUNT
【发布时间】:2021-12-19 09:01:43
【问题描述】:

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

显示每个客户的订单数量,并按订单数量降序排列结果。

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

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

我仍然无法理解查询逻辑。感谢您在理解此查询方面提供帮助。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(无图像)。minimal reproducible example

标签: sql group-by count


【解决方案1】:

我非常希望 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,这意味着它可以在任何数据库上运行。

【讨论】:

    【解决方案2】:

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

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

    脚本应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多