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

如何在BigQuery表中计算每行三个列值的中位数

行内多列中位数SQL实现方案

通用实现方案(兼容绝大多数SQL引擎)

对于固定3个数值列的场景,可直接通过GREATEST、LEAST函数组合实现,逻辑是三个数的中位数等价于总和减去最大值、减去最小值后剩余的数值,示例SQL如下:

SELECT 
    Item,
    `Column 1`,
    `Column 2`,
    `Column 3`,
    (`Column 1` + `Column 2` + `Column 3`) - GREATEST(`Column 1`, `Column 2`, `Column 3`) - LEAST(`Column 1`, `Column 2`, `Column 3`) AS Median
FROM 你的表名;

上述写法代入你给出的示例数据,输出结果完全符合预期:

  • Item A:10+12+4 - 12 -4 = 10
  • Item B:5+14+20 -20 -5 =14
  • Item C:15+5+4 -15 -4=5
    注意:如果列存在NULL值,需要先根据业务逻辑处理NULL(比如替换为0或者过滤对应行)再做计算

支持数组排序的SQL引擎简化方案

如果你使用的是PostgreSQL、Spark SQL、BigQuery等支持数组排序函数的引擎,可以直接将多列转为数组排序后取中间值,写法更简洁,也方便后续扩展列数,示例(PostgreSQL为例):

SELECT 
    Item,
    "Column 1",
    "Column 2",
    "Column 3",
    (ARRAY(SELECT unnest(ARRAY["Column 1", "Column 2", "Column 3"]) ORDER BY 1))[2] AS Median
FROM 你的表名;

三个元素排序后数组的第二个值(PostgreSQL数组下标从1开始)即为中位数,逻辑和上面的通用方案一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:03