Я относительно новичок в MySQL и пытаюсь написать функцию для поиска медианы списка широт. Я нашел пару разных решений этой проблемы в Интернете, но я не мог понять, что они делают. Я решил сделать что-то более легко читаемое и интуитивно понятное, но, похоже, я сталкиваюсь с некоторыми ошибками. По сути, метод находит минимум большей половины чисел и максимум нижней половины и усредняет их. Это должно охватывать как случаи четной, так и нечетной длины.
Я пробовал тестировать каждую часть кода и почему-то думаю, что все мои ошибки исходят из 6-й строки кода, где я пытаюсь найти среднее значение. Мой случай должен охватывать списки как четной, так и нечетной длины, поэтому у меня есть как med1
, так и med2
.
Вот мой текущий код:
SET @med1 = (SELECT min(lat_n)
FROM station
WHERE lat_n >= (SELECT lat_n
FROM station
ORDER BY lat_n ASC
LIMIT FLOOR((SELECT COUNT(*)/2 FROM station)), 1
)
);
SET @med2 = (SELECT max(lat_n)
FROM station
WHERE lat_n <= (SELECT lat_n
FROM station
ORDER BY lat_n DESC
LIMIT FLOOR((SELECT COUNT(*)/2 FROM station)), 1
)
);
select round((@med1 + @med2)/2,4)
и сообщение об ошибке:
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 COUNT(*)/2 FROM station)), 1
Я проверил каждый маленький «бит» кода (счетчик выбора (*), пол, лимит) сам по себе, но по какой-то причине он не работает, когда все вместе. Вывод должен быть медианой столбца lat_n в таблице station, но вместо этого я получаю эту ошибку. Заранее большое спасибо.