Northwind技术咨询:统计单个承运商1997年服务的不同国家数量
解决运输公司1997年覆盖国家数量统计问题
嘿,我懂你的痛点——你现在的查询结果是把每个运输公司和对应国家拆开来统计配送次数,但你真正需要的是每个公司在1997年覆盖的不同国家总数,对吧?
问题出在哪?
你原来的GROUP BY CompanyName, o.CountryID会让数据库把「公司+国家」的组合当成独立分组,所以每个国家都会单独占一行,显示的是该公司在这个国家的配送次数,而不是合并后的国家数量。
修正后的SQL查询
直接调整分组逻辑和统计函数就能解决:
SELECT s.CompanyName, COUNT(DISTINCT o.CountryID) AS UniqueCountriesCovered FROM Shippers s INNER JOIN Orders o ON s.ShipperID = o.ShipVia WHERE DATEPART(year, o.OrderDate) = 1997 GROUP BY s.CompanyName ORDER BY UniqueCountriesCovered DESC;
关键修改点说明
COUNT(DISTINCT o.CountryID):这个函数会在每个公司的分组里,只统计不重复的CountryID数量,完美匹配你要的「覆盖国家数」需求。- 简化
GROUP BY:只保留CompanyName作为分组依据,这样每个运输公司只会返回一行结果,直接展示它覆盖的国家总数。 - 更清晰的别名:把原来的
Shipments改成UniqueCountriesCovered,让结果含义一目了然,避免混淆配送次数和国家数量。
如果之后你还需要同时查看每个公司在各个国家的配送明细+总覆盖数,可以用窗口函数或者子查询扩展,但针对当前需求,上面的查询就足够啦。
内容的提问来源于stack exchange,提问作者DoktorAgon
相关产品推荐
相关产品推荐

