Database
 sql >> база данни >  >> RDS >> Database

Как да филтрираме записи с агрегатна функция SUM

Проблем:

Трябва да намерите редове, в които групите имат сума от стойности в една колона, по-малка от дадена стойност.

Пример:

Нашата база данни има таблица с име company с данни в следните колони:id , department , first_name , last_name и salary .

id отдел first_name фамилно_име заплата
1 маркетинг Лора Кафяв 2300
2 финанси Джон Джаксън 3200
3 маркетинг Майкъл Томсън 1270
4 производство Тони Милър 6500
5 производство Сали Зелено 2500
6 финанси Оливие Черно 3450
7 производство Дженифър Мишлен 2800
8 маркетинг Джереми Лорсън 3600
9 маркетинг Луис Смит 4200

Нека намерим имената на отделите, чиито суми от заплати на служителите са по-малко от 7000.

Решение:

SELECT department, SUM(salary)
FROM company
GROUP BY department
HAVING SUM(salary)<7000;

Ето резултата:

отдел сума
финанси 6550

Дискусия:

За да филтрирате записи с помощта на агрегатната функция (функцията SUM от по-рано), използвайте клаузата HAVING. За да изчислите сумата от стойности за всяка група редове, използвайте функцията SUM за агрегиране. В тази заявка отделът с колони се изчислява със сумата от всички заплати на неговите служители като група (изчислете го с функцията SUM с колоната заплата като аргумент). Тъй като изчислявате стойността за всяка група редове (ние групираме редове според името на отдела), заявката има клауза GROUP BY с името на колоната за групиране на редове (в нашия пример, GROUP BY department ). Последната стъпка е използването на агрегатната функция в клаузата HAVING. Не забравяйте, че HAVING трябва да се постави след клауза GROUP BY. HAVING съдържа условието, сравняващо стойността, върната от агрегатната функция, с дадена стойност. От горе това са сумите на заплатите със стойност по-малка от 7000 (SUM(salary)<7000 ). Тук проверяваме, че сумата на заплатата във всеки отдел е по-ниска от 7000. Заявката показва само един отдел, финанси, със заплати от 6550.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е схема в SQL и как да я създадем?

  2. Тригер в SQL

  3. Пагинация с OFFSET / FETCH :По-добър начин

  4. Защо множеството JOIN са лоши за заявка или не пречат на оптимизатора

  5. Свързване на F# към Salesforce.com