获取2018年「性别」分类最高占比及对应性别SQL正确性问询
原有写法问题
- 你当前的SQL无法实现需求,核心问题出在
GROUP BY子句包含了Strata_Name字段:该写法会把数据按「年份+分类+性别」拆分为独立分组,每组的max([percentage])实际是对应性别自身的占比,Max(Strata_Name)也只是取当前分组的性别值,完全没有实现「取同一年份下占比最高的对应性别」的逻辑。从你提供的查询结果截图也能看到,原有查询返回了2018、2017等年份男女各自的占比数据,确实没有得到你需要的单条最高值结果。 - 现有查询没有添加2018年的筛选条件,返回的是所有年份的分性别占比数据,和你要的2018年单条最高占比结果的需求不符。
正确实现方案
你用到的FORMAT是SQL Server的特有语法,以下方案适配SQL Server环境,借助窗口函数实现取最高占比对应的条目:
SELECT Year, Strata, FORMAT([percentage]/100000, 'P') AS Npercentage, Strata_Name AS gender FROM ( SELECT Year, Strata, percentage, Strata_Name, -- 按占比降序给同一年份的性别分类数据排名 ROW_NUMBER() OVER (PARTITION BY Year, Strata ORDER BY percentage DESC) AS rank_num FROM [dbo].[Depression_in_California] WHERE Strata = 'Sex' AND Year = 2018 -- 直接筛选目标年份和分类 ) AS temp WHERE rank_num = 1 -- 取排名第一的条目,即占比最高的对应数据
如果存在占比并列最高的场景,需要返回所有并列最高的条目,把ROW_NUMBER()替换为RANK()即可。
内容的提问来源于stack exchange,提问作者Freddmo
相关产品推荐
相关产品推荐

