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.