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 |