Sobes.tech
Middle — Senior
28

Как посчитать медиану в SQL без встроенной функции? Как посчитать количество строк в таблице? Знаете ли вы про оконные функции?

Ответ от нейросети

sobes.tech AI

Медиана в SQL без встроенной функции можно посчитать, используя оконные функции или подзапросы. Например, для таблицы с числовым столбцом value:

SELECT AVG(value) AS median FROM (
  SELECT value, ROW_NUMBER() OVER (ORDER BY value) AS rn, COUNT(*) OVER () AS cnt
  FROM your_table
) sub
WHERE rn IN ((cnt + 1) / 2, (cnt + 2) / 2);

Здесь:

  • ROW_NUMBER() нумерует строки по возрастанию значения.
  • COUNT(*) OVER () считает общее количество строк.
  • Берутся средние значения двух центральных элементов (для чётного количества) или один центральный (для нечётного).

Подсчёт количества строк в таблице очень простой:

SELECT COUNT(*) FROM your_table;

Оконные функции — это функции, которые выполняют вычисления по набору строк, связанных с текущей строкой, не сводя результат к одной строке (в отличие от агрегатных функций). Они полезны для ранжирования, подсчёта скользящих сумм, медиан и т.д.

Пример оконной функции:

SELECT value, ROW_NUMBER() OVER (ORDER BY value) AS rn FROM your_table;

Она пронумерует строки по возрастанию значения value.