Sobes.tech
Middle — Senior

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

sobes.tech AI

Отговор от 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.