SQL: LIMIT和OFFSET查找中值



我试图找到奇数浮点数的中位数。出于这个原因,我使用了以下代码-

select a from tab1
limit 1 offset (count(a) div 2) - 1

但是,这个代码给出了语法错误。我正在使用MySQL。对于解决这个问题,任何帮助/建议都是非常感谢的。

MySQL不能在limit中使用表达式。您可以使用窗口函数:

select t.*
from (select tab1.*,
row_number() over (order by a) as seqnum,
count(*) over () as cnt
from tab1
) t
where seqnum = (cnt div 2) - 1 ;

注意:这与您在问题中使用的逻辑相同,但使用窗口函数而不是limit。还有其他方法可以计算中位数——严格来说,这不是中位数,因为它不适用于偶数和奇数行。

最新更新