Database
 sql >> Baza danych >  >> RDS >> Database

Jak filtrować rekordy za pomocą funkcji agregującej SUM

Problem:

Musisz znaleźć wiersze, w których grupy mają sumę wartości w jednej kolumnie mniejszą niż podana wartość.

Przykład:

Nasza baza danych zawiera tabelę o nazwie company z danymi w następujących kolumnach:id , department , first_name , last_name i salary .

id oddział imię nazwisko wynagrodzenie
1 marketing Lora Brązowy 2300
2 finanse Jan Jackson 3200
3 marketing Michael Thomson 1270
4 produkcja Tony Młynarz 6500
5 produkcja Sally Zielony 2500
6 finanse Olivier Czarny 3450
7 produkcja Jeniffer Michelin 2800
8 marketing Jerem Lorson 3600
9 marketing Louis Kowalski 4200

Znajdźmy nazwy działów, w których sumy wynagrodzeń pracowników są mniejsze niż 7000.

Rozwiązanie:

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

Oto wynik:

dział suma
finanse 6550

Dyskusja:

Aby filtrować rekordy za pomocą funkcji agregującej (funkcja SUM z wcześniejszej wersji), użyj klauzuli HAVING. Aby obliczyć sumę wartości dla każdej grupy wierszy, użyj funkcji agregacji SUMA. W tym zapytaniu dział kolumn jest obliczany z sumą wszystkich wynagrodzeń jego pracowników jako grupy (oblicz ją za pomocą funkcji SUMA z pensją kolumny jako argumentem). Ponieważ obliczasz wartość dla każdej grupy wierszy (grupujemy wiersze według nazwy działu), zapytanie zawiera klauzulę GROUP BY z nazwą kolumny do grupowania wierszy (w naszym przykładzie GROUP BY department ). Ostatnim krokiem jest użycie funkcji agregującej w klauzuli HAVING. Pamiętaj, HAVING należy umieścić po klauzuli GROUP BY. HAVING zawiera warunek porównujący wartość zwracaną przez funkcję agregującą z podaną wartością. Z góry są to sumy wynagrodzeń o wartości mniejszej niż 7000 (SUM(salary)<7000 ). Tutaj sprawdzamy, czy suma wynagrodzeń w każdym dziale jest niższa niż 7000. Zapytanie wyświetliło tylko jeden dział, finanse, z pensjami 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. Problemy z konfiguracją dziennika transakcji

  2. Zaawansowane monitorowanie i zarządzanie bazą danych dla TimescaleDB

  3. T-SQL Wtorek #33 :Trick Shots :Schemat Switch-A-Roo

  4. Arkusze kalkulacyjne a bazy danych:czy nadszedł czas na zmianę? Część 2

  5. Zawsze włączone grupy dostępności SQL:obiekty komputerowe