【发布时间】:2013-07-01 03:19:45
【问题描述】:
StackOverflow 的救援!,我需要在一次查询调用中一次找到五列的中位数。
下面的中位数计算适用于单列,但当组合使用时,“rownum”的多次使用会导致查询中断。如何更新它以适用于多个列?谢谢。这是为了创建一个网络工具,非营利组织可以在其中将其财务指标与用户定义的同行群体进行比较。
SELECT t1_wages.totalwages_pctoftotexp AS median_totalwages_pctoftotexp
FROM (
SELECT @rownum := @rownum +1 AS `row_number` , d_wages.totalwages_pctoftotexp
FROM data_990_c3 d_wages, (
SELECT @rownum :=0
)r_wages
WHERE totalwages_pctoftotexp >0
ORDER BY d_wages.totalwages_pctoftotexp
) AS t1_wages, (
SELECT COUNT( * ) AS total_rows
FROM data_990_c3 d_wages
WHERE totalwages_pctoftotexp >0
) AS t2_wages
WHERE 1
AND t1_wages.row_number = FLOOR( total_rows /2 ) +1
--- [that was one median, below is another] ---
SELECT t1_solvent.solvent_days AS median_solvent_days
FROM (
SELECT @rownum := @rownum +1 AS `row_number` , d_solvent.solvent_days
FROM data_990_c3 d_solvent, (
SELECT @rownum :=0
)r_solvent
WHERE solvent_days >0
ORDER BY d_solvent.solvent_days
) AS t1_solvent, (
SELECT COUNT( * ) AS total_rows
FROM data_990_c3 d_solvent
WHERE solvent_days >0
) AS t2_solvent
WHERE 1
AND t1_solvent.row_number = FLOOR( total_rows /2 ) +1
[那是两个 - 总共有五个我最终需要一次找到中位数]
【问题讨论】:
-
语法适用于 MySQL,而不是 SQL Server
-
您能提供一个示例表和数据集吗?
-
可惜你没有 Oracle。它有一个
MEDIAN(item)函数。但是使用 Oracle 会非常清晰地将您的非营利组织转变为非营利组织。
标签: mysql duplicates median