sqlite 罗斯文数据库:查询时卡住[已关闭]

y53ybaqx  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(162)

已关闭。此问题需要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年。

m3eecexj

m3eecexj1#

您没有正确理解group by
您可以将群组视为一组数据列,其中具有指定的数据行清单,而且所有数据行的值都相同。
select子句中的每一列也必须在group by子句中列出-除非它是聚合函数的参数,如max()sum()。否则,数据库无法知道它应该从分区中该列的可能的多个不同值中挑选哪个值。
在你的第一个查询中,你想要group by公司; orderid在输出中没有任何关系,并且在赋值中没有提及:

SELECT s.companyName, count(*) as cntShipments
FROM Orders o 
INNER JOIN Shippers s ON o.ShipVia = s.ShipperID 
GROUP BY s.CompanyName 
ORDER BY cnt_shipments DESC;

请注意,您可以在order by子句中使用数据行别名。
在第二个查询中,我们只是将year添加到SELECTGROUP BY子句中:

SELECT s.companyName, strftime('%Y', o.OrderDate) orderYear
    count(*) as cntShipments
FROM Orders o 
INNER JOIN Shippers s ON o.ShipVia = s.ShipperID 
GROUP BY s.CompanyName, strftime('%Y', o.OrderDate)
ORDER BY orderYear, cnt_shipments DESC;

相关问题