You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL计算中位数报错求助:LIMIT子句使用COUNT函数语法错误

解决计算STATION表LAT_N中位数的SQL语法错误

错误原因

你写的SQL里,LIMIT FLOOR(COUNT(LAT_N)/2),1这行语法不合法——MySQL的LIMIT子句不能直接用聚合函数(比如COUNT)当参数。LIMIT需要的是确定的数值,而COUNT是要先统计全表数据的聚合运算,没法直接嵌套在LIMIT里动态计算。

正确写法

方法一:先算总条数再取偏移量

先把总记录数存到变量里,再用这个变量来计算LIMIT的偏移值:

SET @total = (SELECT COUNT(*) FROM STATION);
SELECT LAT_N
FROM STATION
ORDER BY LAT_N ASC
LIMIT FLOOR((@total - 1)/2), 1;

方法二:用窗口函数(适合MySQL 8.0及以上版本)

通过窗口函数给每条数据排号,然后筛选出中间位置的那条:

SELECT LAT_N
FROM (
    SELECT 
        LAT_N,
        ROW_NUMBER() OVER (ORDER BY LAT_N) AS rn,
        COUNT(*) OVER () AS total
    FROM STATION
) AS temp
WHERE rn = FLOOR((total + 1)/2);

额外说明

如果遇到偶数条记录的情况,中位数是中间两个数的平均值,这时候需要调整逻辑取两个数再求平均,但HackerRank这个题的数据集应该是奇数条,上面的写法直接能用。

内容的提问来源于stack exchange,提问作者qwertyui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:15:00