我正在尝试编写一个存储过程来从表中检索薪水的中位数,并且在弄清楚如何从游标中检索数据时遇到了麻烦。 目前,我的代码是:
END
我似乎找不到与我要达到的目标相似的文档,任何帮助将不胜感激。
答案 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);
请注意,WHERE
子句中的丑陋与表的边缘情况(记录数 )有关。在这种情况下,从技术上讲,没有单一的中位数记录,因此我报告了两个记录的 mean ,它们位于任一侧的中值附近。