已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
5天前关闭。
Improve this question
查询:统计每个发货公司处理的发货数量。
B)如果您按年份分组会怎样。
在this database上,它有this schema。
我的尝试:统计每个船公司处理的货物数量。
SELECT o.OrderID, s.CompanyName, COUNT(*)
FROM Orders o JOIN Shippers s ON o.ShipVia = s.ShipperID
GROUP BY s.CompanyName
ORDER BY COUNT(o.OrderID) DESC;
输出量:
10250 | United Package | 326
10248 | Federal Shipping | 255
10249 | Speedy Express | 249
我认为这是非常正确的,但它有一些奇怪的10250!输出。
我的尝试:统计每个船公司处理的货件数量。
SELECT o.OrderID, s.CompanyName, strftime('%Y', o.OrderDate), COUNT(*)
FROM Orders o JOIN Shippers s ON o.ShipVia = s.ShipperID
GROUP BY s.CompanyName
ORDER BY COUNT(o.OrderID) DESC;
输出量:
10250 | United Package | 2016 | 326
10248 | Federal Shipping | 2016 | 255
10249 | Speedy Express | 2016 |249
我认为这是接近,但我不能得到它的所有年组。它只输出2016年。
1条答案
按热度按时间m3eecexj1#
您没有正确理解
group by
。您可以将群组视为一组数据列,其中具有指定的数据行清单,而且所有数据行的值都相同。
select
子句中的每一列也必须在group by
子句中列出-除非它是聚合函数的参数,如max()
或sum()
。否则,数据库无法知道它应该从分区中该列的可能的多个不同值中挑选哪个值。在你的第一个查询中,你想要
group by
公司;orderid
在输出中没有任何关系,并且在赋值中没有提及:请注意,您可以在
order by
子句中使用数据行别名。在第二个查询中,我们只是将year添加到
SELECT
和GROUP BY
子句中: