SQL Server中GROUPING SETS函数分组顺序与预期不符
解决GROUPING SETS结果顺序不符预期的问题
首先明确:GROUPING SETS里的分组顺序不决定结果集的输出顺序,数据库会根据自身查询优化逻辑调整分组执行顺序,所以返回结果和你写的分组列表反向是正常现象。
要得到你预期的「先continent分组,再country,最后city」的结果顺序,必须显式添加ORDER BY,同时借助GROUPING()函数区分不同分组层级——因为GROUPING SETS生成的结果中,未参与分组的列会显示为NULL,这个函数可以判断某列是否属于当前分组:
GROUPING(continent)返回0表示continent参与了当前分组,返回1表示未参与- 同理,
GROUPING(country)、GROUPING(city)也遵循这个规则
修改后的SQL如下:
select continent , country , city , sum(units_sold) from Sales group by GROUPING SETS (continent,country,city) order by GROUPING(continent), -- 优先显示continent级汇总(值为0) GROUPING(country), -- 其次显示country级汇总,最后是city级 continent, country, city;
这样就能保证结果按continent→country→city的分组顺序输出。
内容的提问来源于stack exchange,提问作者Nischit Sapkota
相关产品推荐
相关产品推荐

