Groepsfuncties#

%LOAD ../data/employees.db

Er zijn zeven groepsfuncties: MIN, MAX, SUM, AVG, COUNT, STDDEV, VARIANCE. Groepsfuncties worden losgelaten op een set van waarden, waarna ze één waarde als resultaat retourneren (multi-row functions). Groepsfuncties worden vaak in combinatie met GROUP BY (en met HAVING) toegepast. STDDEV (standaarddeviatie) en VARIANCE (variantie) worden hier niet verder behandeld.

  • Groepsfuncties kunnen niet worden gebruikt in de WHERE regel.

SELECT last_name
FROM employees
WHERE salary = MAX(salary);
Error: misuse of aggregate function MAX()
  • Je kunt meerdere groepsfuncties op de SELECT regel gebruiken.

SELECT MIN(salary), MAX(salary), SUM(salary), AVG(salary), COUNT(salary)
FROM employees;
MIN(salary) MAX(salary) SUM(salary) AVG(salary) COUNT(salary)
2500 24000 175500 8775.0 20
  • MIN, MAX en COUNT kun je met elk datatype gebruiken. SUM en AVG kun je enkel met numerieke datatypes gebruiken.

  • NULL waardes worden genegeerd en niet als 0 geteld.

  • DISTINCT kan gebruikt worden met alle groepsfuncties.

Min#

Met MIN haal je de kleinste waarde op van een kolom van een aantal rijen. Elk datatype (numeriek, alfanumeriek, datum) kan hiervoor gebruikt worden.

SELECT MIN(salary)
FROM employees;
MIN(salary)
2500
SELECT MIN(last_name)
FROM employees;
MIN(last_name)
Abel
SELECT MIN(hire_date)
FROM employees;
MIN(hire_date)
1987-06-17

Max#

Met MAX haal je de hoogste waarde op van een kolom van een aantal rijen. Elk datatype (numeriek, alfanumeriek, datum) kan hiervoor gebruikt worden.

SELECT MAX(salary)
FROM employees;
MAX(salary)
24000
SELECT MAX(last_name)
FROM employees;
MAX(last_name)
Zlotkey
SELECT MAX(hire_date)
FROM employees;
MAX(hire_date)
2000-01-29

Sum#

Met SUM haal je de som op van een kolom van een aantal rijen, dus alle rijen bij elkaar opgeteld. Het kan alleen maar gebruikt worden voor kolommen met een numeriek datatype.

SELECT SUM(salary)
FROM employees;
SUM(salary)
175500

Als je de dubbele waarden niet mee wil tellen met behulp van DISTINCT krijg je een ander resultaat. De salarissen 6000 en 17000 komen twee keer voor.

SELECT SUM(DISTINCT salary)
FROM employees;
SUM(DISTINCT salary)
152500

Voorbeeld van een SUM met een WHERE.

SELECT SUM(salary) som_salarissen_afdeling_90
FROM employees
WHERE department_id = 90;
som_salarissen_afdeling_90
58000

Hetzelfde voorbeeld maar nu met de som van alle salarissen zonder de duplicaten.

SELECT SUM(DISTINCT salary) som_salarissen_afdeling_90
FROM employees
WHERE department_id = 90;
som_salarissen_afdeling_90
41000

Avg#

Met AVG haal je het gemiddelde op van een kolom van een aantal rijen. Het kan alleen maar gebruikt worden voor kolommen met een numeriek datatype.

SELECT AVG(salary)
FROM employees;
AVG(salary)
8775.0

NULL waarden worden niet meegeteld in de berekening.

SELECT AVG(commission_pct)
FROM employees;
AVG(commission_pct)
0.2125

Als je de NULL waarden wel wil meetellen, bijvoorbeeld als 0, dan kun je met IFNULL de NULL waarden vervangen door 0.

SELECT AVG(IFNULL(commission_pct, 0))
FROM employees;
AVG(IFNULL(commission_pct, 0))
0.0425

Count#

Met COUNT tel je het aantal rijen.

SELECT COUNT(last_name)
FROM employees;
COUNT(last_name)
20

Duplicaatwaarden worden afzonderlijk meegerekend.

SELECT COUNT(job_id)
FROM employees;
COUNT(job_id)
20

Als je duplicaatwaarden wil negeren, moet je tussen de haakjes vóór de kolomnaam DISTINCT toevoegen. Er zijn twaalf verschillende job_id’s.

SELECT COUNT(DISTINCT job_id)
FROM employees;
COUNT(DISTINCT job_id)
12

NULL waarden worden genegeerd.

SELECT COUNT(commission_pct)
FROM employees;
COUNT(commission_pct)
4

Met COUNT(*) worden alle rijen in de tabel geteld en wordt er niet gekeken naar een specifieke kolom.

SELECT COUNT(*)
FROM employees;
COUNT(*)
20

Voorbeeld van een COUNT(*) met een WHERE.

SELECT COUNT(*)
FROM employees
WHERE hire_date < '1996-01-01';
COUNT(*)
9