Group BY, Average in Group by и индивидуальная фильтрация в SQL

Я не понимаю логику того, как выполнить группировку по отделам и найти среднюю зарплату отдела, а затем отфильтровать все строки таблицы по значениям, превышающим среднюю зарплату этого отдела в SQL.

ОтделениеЗарплата
А100
Б200
А200
Б50

Таким образом, среднее значение группы А равно 150. а средний балл группы B равен 125. Мой запрос должен вернуть: -

ОтделениеЗарплата
Б200
А200
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны посмотреть, как работает группировка в SQL. Этот запрос найдет отдел и его среднюю зарплату:

SELECT department, AVG(salary) salary FROM yourtable 
GROUP BY department;

Чтобы найти отделы с более высокой зарплатой, вы можете просто соединить всю таблицу и этот «средний результат» и выбрать только те записи, у которых зарплата выше:

SELECT y.department, y.salary FROM yourtable y
JOIN (SELECT department, AVG(salary) salary FROM yourtable 
GROUP BY department) average
ON y.department = average.department
WHERE y.salary > average.salary
ORDER BY y.department;

Предложение заказа позволяет отделу А появиться перед отделом Б. В вашем описании он отсортирован по-другому. Если вы хотите изменить это, вы можете написать ORDER BY y.department DESC; Последнее замечание: если в таблице окладов есть значения NULL, они не будут учитываться функцией среднего значения. Итак, если у вас есть 10 нулевых значений, одна строка с зарплатой 100 и одна с зарплатой 50, среднее значение будет 75 и «игнорировать» значения NULL. Если вы этого не хотите, вам нужно заменить значения NULL нужным вам значением. Например, вы можете написать COALESCE(salary,0) в своем запросе, если хотите заменить все значения NULL на ноль при расчете средней зарплаты.

Другие вопросы по теме