SQL查询各州最高收入对应县并列结果处理问题咨询
结论
仅添加SELECT DISTINCT无法实现你要的效果。
原因
DISTINCT的作用是对查询返回的整行字段组合去重,你现有语句查询IL州的最高收入记录时,会返回两行完全不同的结果:
| STATE | COUNTY | MAX_INCOME |
|---|---|---|
| IL | COOK | 1000 |
| IL | LAKE | 1000 |
两行的COUNTY字段值不同,不属于重复行,因此加DISTINCT后这两条记录都会被保留,依然不符合预期。
正确实现方案
可以使用窗口函数ROW_NUMBER()实现需求,兼容绝大多数主流数据库(MySQL8.0+、PostgreSQL、SQL Server等):
SELECT STATE, COUNTY, INCOME FROM ( SELECT STATE, COUNTY, INCOME, -- 按州分组,组内先按收入降序,收入相同则按县名字母升序排序 ROW_NUMBER() OVER(PARTITION BY STATE ORDER BY INCOME DESC, COUNTY ASC) AS rank_num FROM `table` ) AS temp WHERE rank_num = 1;
上述逻辑中,收入相同的县按名字排序后取第一个,刚好符合你给出的预期结果(IL州取COOK)。如果后续需要保留所有并列最高的县,把ROW_NUMBER()替换为RANK()即可。
内容的提问来源于stack exchange,提问作者Grant Culp
相关产品推荐
相关产品推荐

