TGViewer
SQL Pro SQL Pro @sqlprofi · 4.91K subscribers
Post #1021 1.94K
Трюк дня. Найти медиану

Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.

Необходимо найти медиану для данного столбца.


Решение:
В PostgreSQL используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) FROM table;

В MS SQL также используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) OVER (PARTITION BY 1) FROM table;

В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.

В Oracle используйте функцию MEDIAN:
SELECT MEDIAN (sales) OVER (PARTITION BY 1) FROM table;

Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.

/*задаем переменную row_index = -1, чтобы отсчет индекса начался с 0 */
SET @row_index := -1;

/*находим среднее двух значений в центре отсортированного набора. Охватывает те случаи, когда общее число записей четное*/
SELECT AVG (subq.sales) as median_value
FROM (
SELECT @row_index:=@row_index + 1 AS row_index, sales
FROM table
ORDER BY sales
) AS subq
WHERE subq.row_index
/*выбираем только значения в центре: одно если число записей нечетное и два если четное*/
IN (FLOOR(@row_index / 2) , CEIL(@row_index / 2));

Ответ: медиана = 4.

#tips
  • 🔥 4
More from @sqlprofi
  1. Oct 7, 2026❔ Вопрос с собеседования Как работает SQL-триггер? Ответ: Когда происходит событие, СУБД а…
  2. Oct 2, 2026SELECT order_id FROM order_table o JOIN customer c ON o.customer_id = c.customer_id WHERE…
  3. Aug 17, 2026Большой тест по SQL для тестировщиков из 44 вопроса - https://qarocks.ru/test_post/big-sql…
  4. Aug 10, 20265 обязательных книг по SQL 1⃣ “SQL: быстрое погружение”. Автор - Уолтер Шилдс Эта книга по…
  5. Jul 28, 2026Трюк дня. Сравнение с предыдущим. Решение. Решение: использование DATEDIFF DATEDIFF: эта ф…
  6. Jul 28, 2026Трюк дня. Сравнение с предыдущим Напишите SQL-запрос, который находит в таблице weather вс…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →