MySQL: поиск медианы с использованием метода «две половины» - PullRequest
0 голосов
/ 28 марта 2019

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

1 Ответ

0 голосов
/ 28 марта 2019

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

...