Mysql 使用SELECT COUNT(*)跳过值进行限制

Mysql 使用SELECT COUNT(*)跳过值进行限制,mysql,sql,Mysql,Sql,所以我想用mySQL得到一个数值列的中间值 这是我的密码: SELECT LAT_N FROM STATION ORDER BY LAT_N LIMIT SELECT FLOOR(COUNT(*)/2) FROM STATION,1 其中LAT_N是我要检查的列名,STATION是表名。我得到了下面的错误,但我不能理解哪个语法是错误的 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the ma

所以我想用mySQL得到一个数值列的中间值

这是我的密码:

SELECT LAT_N FROM STATION
ORDER BY LAT_N
LIMIT SELECT FLOOR(COUNT(*)/2) FROM STATION,1
其中LAT_N是我要检查的列名,STATION是表名。我得到了下面的错误,但我不能理解哪个语法是错误的

ERROR 1064 (42000) at line 1: 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 '(SELECT FLOOR(COUNT(*)/2) FROM STATION),1' at line 3

你能帮我找到语法错误吗?如果可能,我希望使用相同的方法计算中值。

您可以使用窗口函数:

SELECT LAT_N
FROM (SELECT S.*,
             COUNT(*) OVER () AS CNT,
             ROW_NUMBER() OVER (ORDER BY LAT_N) AS SEQNUM
      FROM STATION S
     ) S
WHERE SEQNUM = FLOOR(CNT / 2);

您可以使用准备好的语句,因为Limit只接受数字

 SELECT FLOOR(COUNT(*)/2) INTO @a FROM STATION;
SET @s = 'SELECT LAT_N FROM STATION
ORDER BY LAT_N
LIMIT ?,1';
PREPARE stmt1 FROM @s;
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;

这是否意味着我们不能使用查询获取一个数字作为limit中的输入?limit需要一个类似于1 2,3的数字,并且不允许使用变量或SELECT resultset,因此,如果要使用limit,必须使用准备好的语句