Медиана массива чисел — это значение среднего элемента в массиве, при условии, что массив отсортирован. Если массив имеет четное количество элементов, медиана представляет среднее значение двух средних значений в массиве.
Это значение очень популярно, и каждый пытается понять, «в чём половина моей стоимости?». Например, мы получили D (или 80) в нашем последнем тесте в школе, находимся ли мы среди 50% лучших учеников моего класса или нет?
В качестве практического примера давайте рассмотрим процесс извлечения медианного значения из следующего массива школьных тестовых оценок: [55, 80, 95, 100, 99, 70, 60].
К сожалению, MySQL пока не предлагает встроенную функцию для вычисления медианного значения столбца. Поэтому нам придется создавать запрос самостоятельно.
Предположим, мы хотели бы получить медианное значение из столбца `grades`. Давайте рассмотрим алгоритм, который мы будем использовать для построения запроса:
Так как будет выглядеть такой запрос?
SET @rowindex := -1; SELECT AVG(g.grade) FROM (SELECT @rowindex:=@rowindex + 1 AS rowindex, grades.grade AS grade FROM grades ORDER BY grades.grade) AS g WHERE g.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));
Давайте сделаем некоторые объяснения:
Как видите, это не так просто, как запуск MEDIAN (column_name), но это выполнимо. Давайте скрестим пальцы, что MySQL решит добавить эту функциональность во встроенный продукт, что упростит любой запрос, который выбирает среднее значение.
Мне кажется, что человек, который понимает язык этой статьи, уже знает ответ на вопрос, в чём разница между статическим и динамическим SQL. А я не понял. Я хотел понять, в чём разница между статическим и динамическим запросом. Яндекс даёт эту статью на первой странице в ответ на запрос «Что такое динамический запрос». Вроде статья должна ответить на этот вопрос, но уровень явно для академиков.