You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:15:04