SQL游标以确定中值

时间:2018-08-10 05:02:24

标签: mysql sql cursor

我正在尝试编写一个存储过程来从表中检索薪水的中位数,并且在弄清楚如何从游标中检索数据时遇到了麻烦。 目前,我的代码是:

END

我似乎找不到与我要达到的目标相似的文档,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于您的存储过程问题,我没有答案,但是请注意,实际上我们可以使用会话变量来模拟行数,很容易地从MySQL的表中找到中位数:

SET @row_number = 0;
SET @row_count = (SELECT COUNT(*) FROM yourtable);

SELECT AVG(salary) AS median
FROM
(
    SELECT (@row_number:=@row_number + 1) AS rn, salary
    FROM yourTable
    ORDER BY salary
) t
WHERE
    (@row_count % 2 = 0 AND rn IN (@row_count / 2, (@row_count / 2) + 1) OR
     @row_count % 2 <> 0 AND rn = @row_count / 2);

Demo

请注意,WHERE子句中的丑陋与表的边缘情况(记录数 )有关。在这种情况下,从技术上讲,没有单一的中位数记录,因此我报告了两个记录的 mean ,它们位于任一侧的中值附近。