ОГРАНИЧЕНИЕ значением ПРОПУСКА с помощью 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 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
  

Не могли бы вы помочь мне найти синтаксическую ошибку? Если возможно, я хотел бы рассчитать медиану таким же образом.

Ответ №1:

Вместо этого вы можете использовать оконные функции:

 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);
  

Ответ №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;
  

Комментарии:

1. Означает ли это, что мы не можем использовать query для получения числа, которое будет использоваться в качестве входных данных в limit ?

2. Для ограничения требуется число, например, 1 2,3, и оно не допускает переменные или SELECT resultset, поэтому вы должны использовать подготовленные заготовки, если хотите использовать Limit