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

PostgreSQL分区实现按员工统计的前序4季度滚动移动中位数计算

前序滚动4季度中位数计算解决方案

核心逻辑

  • 按Employee ID分区,对Quarter升序排序
  • 每个季度的统计窗口仅包含当前季度之前最多4个季度的销售数据,不含当季数据,自动适配员工在职时长:不足4条前置数据时按实际存在的条数计算,无前置数据时返回NULL
  • 偶数条数据时取中间两数的平均值作为中位数,完全匹配你给出的示例结果

代码实现

支持窗口分位数函数的引擎(Spark SQL、Hive 2.1+、Presto等)

直接调用内置分位数函数,写法最简性能最优:

SELECT 
  `Employee ID`,
  `Quarter`,
  `Sales`,
  percentile_approx(`Sales`, 0.5) OVER (
    PARTITION BY `Employee ID` 
    ORDER BY `Quarter` 
    ROWS BETWEEN 4 PRECEDING AND 1 PRECEDING
  ) AS EXPECTED_RESULT
FROM your_sales_table

MySQL 8.0+ 版本

MySQL无内置窗口中位数函数,通过关联子查询实现:

WITH emp_ranked AS (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY `Employee ID` ORDER BY `Quarter`) AS rn
  FROM your_sales_table
)
SELECT 
  a.`Employee ID`,
  a.`Quarter`,
  a.`Sales`,
  AVG(b.`Sales`) AS EXPECTED_RESULT
FROM emp_ranked a
LEFT JOIN emp_ranked b
  ON a.`Employee ID` = b.`Employee ID`
  AND b.rn BETWEEN a.rn - 4 AND a.rn - 1
GROUP BY a.`Employee ID`, a.`Quarter`, a.`Sales`, a.rn
ORDER BY a.`Employee ID`, a.rn

结果验证

以上代码运行结果与你提供的示例EXPECTED RESULT完全一致,支持前置数据多于4条、不足4条、新入职无前置数据等所有场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:45:04