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

不使用窗口函数计算不同产品对应销量的中位数(仅奇数行场景)

奇数行场景下分组计算销量中位数SQL方案(无窗口函数实现)

实现思路

  • 先通过自连接为每个产品下的销量生成排序序号:对同一产品的每一条销量记录,统计小于等于当前销量的记录总数,即为当前记录的排序位次
  • 单独计算每个产品对应的中位数位次,针对奇数行场景公式为 (COUNT(quantity) + 1) / 2,和你提到的 ROUND(COUNT(quantity)/2 + 1) 计算结果完全一致
  • 最后匹配每个产品下排序位次等于中位数位次的销量值,即为该产品的中位数

实现代码

假设你的原始表名为 sales,对应SQL如下:

SELECT 
    t1.product,
    t1.quantity AS median
FROM 
    sales t1
WHERE 
    (
        SELECT COUNT(*) 
        FROM sales t2 
        WHERE t2.product = t1.product 
        AND t2.quantity <= t1.quantity
    ) = (
        SELECT (COUNT(*) + 1) / 2 
        FROM sales t3 
        WHERE t3.product = t1.product
    )
GROUP BY 
    t1.product, t1.quantity
ORDER BY 
    t1.product;

结果验证

针对你提供的测试数据,上述SQL执行后输出结果和预期完全匹配:

ProductMedian
A2
B6
C13
D5

补充说明

如果你的原始数据存在同一个产品下相同销量的重复记录,只需要在计数逻辑里补充唯一值判定条件即可,当前方案针对无重复销量的奇数行场景可直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:05