gpt4 book ai didi

mysql - SQL 求中位数

转载 作者:行者123 更新时间:2023-11-29 10:33:38 27 4
gpt4 key购买 nike

我有一个表,其中包含 499 个正非整数 N,我想找到这些数字的中位数,如下:

SELECT (ROUND(N,4)) FROM TABLE ORDER BY N LIMIT 1 OFFSET ((COUNT(N)-1)/2);

我收到以下错误:

"ERROR 1064 (42000) at line 15: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '((COUNT(N)-1)/2)' at line 4"

如果我将 ((COUNT(N)-1)/2) 替换为 249 (其中中位数将在表格排序后),则此方法有效,所以我无法使用((COUNT(N)-1)/2)。为什么是这样?我应该用什么来代替来找到中位数?

谢谢

最佳答案

唉,您不能在限制中包含表达式。您可以计算表中的行数,然后将其作为限制传递。

我通常会使用:

select avg(n)
from (select t.*, (@rn := @rn + 1) as rn
from (select t.*
from t
order by n
) t cross join
(select @rn := 0) params
) t
where 2 * rn in (@rn - 1, @rn, @rn + 1);

注释:

  • 最新版本的 MySQL 需要额外级别的子查询 - 参数并不总是与 order by 混合使用。
  • where 适用于偶数和奇数行。
  • 当行数为偶数时,avg() 取中间点。

关于mysql - SQL 求中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46907621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com