MySQL: поиск медианы с использованием метода двух половин

Я относительно новичок в 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, но вместо этого я получаю эту ошибку. Заранее большое спасибо.


person NeonCop    schedule 28.03.2019    source источник
comment
Вероятно, вам нужно разграничить операторы SET — add ; в конце каждого, чтобы сообщить MySQL, что вы закончили оператор.   -  person Neville Kuyt    schedule 28.03.2019
comment
@NevilleKuyt только что попробовал это и не сработало, но я обновлю код в вопросе   -  person NeonCop    schedule 28.03.2019


Ответы (1)


Вы не можете использовать вычисления или переменные в Предложение LIMIT. Есть обходные пути (доступны по ссылке).

person Neville Kuyt    schedule 28.03.2019