Нужно вычислить медианную зарплату по каждому отделу в одном запросе. В PostgreSQL нет функции MEDIAN(). Какой синтаксис корректен?
AИспользовать
AVG(salary) с условием WHERE salary BETWEEN MIN(salary) AND MAX(salary)BИспользовать
SELECT salary FROM employees ORDER BY salary LIMIT 1 OFFSET COUNT(*)/2 в подзапросеCИспользовать
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) — упорядоченную агрегатную функциюDИспользовать
(MAX(salary) + MIN(salary)) / 2 — полусумма крайних значений группыПравильный ответ.
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) — стандартная упорядоченная агрегатная функция для вычисления медианы, работает с GROUP BY.Разбор
PERCENTILE_CONT(fraction) WITHIN GROUP (ORDER BY col) — упорядоченная агрегатная функция стандарта SQL:2003. При fraction=0.5 возвращает медиану с линейной интерполяцией. PERCENTILE_DISC(0.5) возвращает ближайшее реальное значение без интерполяции. Обе работают с GROUP BY. (MAX + MIN) / 2 — среднее крайних значений, что не равно медиане при несимметричном распределении.
Проверь себя · 1/3разбор после ответа
Нужно получить количество заказов по паре (
user_id, status) из таблицы orders. Какой запрос верный?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT`?
- Что делает `HAVING`?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице `users` есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →