#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