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

求助:按ID、Month、Section分组计算SQL数据集中位数

修正后的中位数计算SQL代码

一、NTILE() 实现(近似中位数)

原代码存在以下问题:

  • PARTITION BY语法错误,未指定正确分组字段,且包含无关的[bestCT]
  • ORDER BY逻辑错误,应按目标字段BestTime排序而非Section
  • NTILE(4)用于四分位数计算,不适合中位数场景,改用NTILE(2)拆分数据为上下两半

修正后的代码:

SELECT ID, [Month], Section, MIN(BestTime) AS Median
FROM (
    SELECT 
        ID, [Month], Section, BestTime,
        NTILE(2) OVER(PARTITION BY ID, [Month], Section ORDER BY BestTime) AS Half
    FROM MonthlyCycleTime SK
) X
WHERE Half = 2
GROUP BY ID, [Month], Section

注:如果分组内数据行数为奇数,NTILE(2)会让上半组多一行,此时取Half=2的最小值更接近中位数;若需精确中位数,优先使用PERCENTILE_CONT。

二、PERCENTILE_CONT() 实现(精确中位数)

原代码存在以下问题:

  • PARTITION BY字段错误,应按ID, [Month], Section分组而非Section, BestTime
  • 语法错误,多了一个冗余的右括号

修正后的代码:

SELECT DISTINCT 
    ID, [Month], Section,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BestTime) 
        OVER(PARTITION BY ID, [Month], Section) AS Median
FROM MonthlyCycleTime SK

说明:PERCENTILE_CONT(0.5)会返回分组内的精确中位数(偶数行时取中间两数的平均值),通过DISTINCT去重后得到每个分组的唯一结果。

内容的提问来源于stack exchange,提问作者KH19

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:48:27