Databases 5 - GROUP BY...HAVING, CASE

We gaan even naar een andere site kijken voor een voorbeeld van GROUP BY...HAVING

Je kunt groeperen op meerdere kolommen. SQL zoekt dan welke kolommen dezelfde waarden hebben. Uitleg hier
1 / 13
next
Slide 1: Slide
InformaticaMiddelbare schoolhavo, vwoLeerjaar 4-6

This lesson contains 13 slides, with text slides.

time-iconLesson duration is: 50 min

Items in this lesson

We gaan even naar een andere site kijken voor een voorbeeld van GROUP BY...HAVING

Je kunt groeperen op meerdere kolommen. SQL zoekt dan welke kolommen dezelfde waarden hebben. Uitleg hier

Slide 1 - Slide

This item has no instructions

Khan academy: Challenge Gradebook

Doel: Hoeveel studenten hebben welke 'graad' gehaald, letter_grade.

PER letter_grade wil je dit weten, maar dit is geen kolom.
De kolom maak je m.b.v. een CASE. 
door rijen number_grade bij elkaar op te tellen.

Slide 2 - Slide

This item has no instructions

CASE:
  • Als je data wilt groeperen en er een label aan wilt hangen, dan maak je met CASE een extra kolom
  • Voor de leesbaarheid geef je de kolom met AS een andere naam
  • Het resultaat kun je dan ook weer groeperen, bv. om het aantal rijen te tellen dat aan de conditie voldoet
  • We bekijken een paar voorbeelden van w3schools hier

Slide 3 - Slide

Voorbeeld van w3school uitwerken in de Tryouteditor. 
vd COUNT, GROUP BY, having TOEVOEGEN

SELECT COUNT(*),
CASE WHEN Quantity > 30 THEN 'The quantity is greater than 30'
WHEN Quantity = 30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails
GROUP BY QuantityText;

We nemen de tabel Suppliers en maken het volgende commando:
SELECT COUNTRY, /* vergeet de komma niet*/
CASE
WHEN Country IN ("UK", "Spain", "Sweden", "Germany", "Italy", "Norway") THEN "Europe"
ELSE "Outside Europe"
END /*vergeet de END niet*/
FROM Suppliers;

Slide 4 - Slide

This item has no instructions

Stap 2: Maak een andere kolomnaam met AS
SELECT COUNTRY,
CASE
WHEN Country IN ("UK", "Spain", "Sweden", "Germany", "Italy", "Norway") THEN "Europe"
ELSE "Outside Europe"
END
AS "From_Europe"
FROM Suppliers
;


Slide 5 - Slide

This item has no instructions

Stap 3: Nu wil ik het aantal landen hebben, dus niet per land. Ik groepeer dan op de nieuwe kolom. Die moet dan geen aanhalingstekens hebben.
SELECT COUNT(*),
CASE
WHEN Country IN ("UK", "Spain", "Sweden", "Germany", "Italy", "Norway") THEN "Europe"
ELSE "Outside Europe"
END
AS "From_Europe"
FROM Suppliers
GROUP BY From_Europe /* dit moet zonder spaties */
;

Slide 6 - Slide

This item has no instructions

Stap 1: Teken de structuur van de tabel en de kolom number_grade

id
name
n_g
f_c
1
90
2
95
3
85
4
66
5
76
6
82

Slide 7 - Slide

This item has no instructions

id
name
n_g
l_g
1
90
B
2
95
A
3
85
B
4
66
F
5
76
C
6
82
B

Slide 8 - Slide

This item has no instructions

Voeg de structuur van een CASE-statement toe:

bv.
SELECT COUNT(*), move,
CASE
 WHEN SUM(minuten) > 60 THEN "heel goed"
 WHEN SUM(minuten) > 30 THEN "mag beter"
 ELSE "luiwammes"
END AS "conditieverbetering"
FROM conditie
GROUP BY move;

Slide 9 - Slide

This item has no instructions

Pas het CASE-statement aan:

SELECT COUNT(*), 
CASE
 WHEN ....wat moet hier komen? > 60 THEN "A"
 WHEN SUM(minuten) > 30 THEN "mag beter"
 ELSE "luiwammes"
END AS ".....wat moet hier komen"
FROM student_grades
GROUP BY .....wat moet hier komen;

Slide 10 - Slide

SELECT COUNT(*),
CASE
 WHEN number_grade > 90 THEN "A"
 WHEN number_grade > 80 THEN "B"
 WHEN number_grade > 70 THEN "C"
 ELSE "F"
END AS "letter_grade"
FROM student_grades
GROUP BY letter_grade;
We gaan een CASE-statement bekijken, met een Strava-voorbeeld.
Open in een SQL-editor : StravaCASE.txt (in classroom)

Je hebt hierin bijgehouden hoe vaak je welke sport (move) hebt beoefend, en hoeveel minuten je daaraan hebt besteed.
Je wilt weten hoeveel minuten in totaal je PER sport hebt besteed, en hoe vaak je iedere sport hebt gedaan.
Als het totaal aantal minuten een bepaalde waarde heeft, krijg je een bepaalde uitkomst, namelijk "heel goed", "mag beter", of "luiwammes"

Slide 11 - Slide

This item has no instructions

Opdracht:
Maak een SELECT-statement dat: Het aantal rijen telt, per move. Voeg een CASE toe:
Als het totale aantal minuten boven de 60 is, "heel goed", boven de 30, "mag beter",
anders, "luiwammes". Geef met een AS een andere naam aan de kolom move.
In w3schools kun je zien hoe een CASE-statement opgebouwd wordt


Slide 12 - Slide

This item has no instructions

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END
FROM OrderDetails;

Slide 13 - Slide

This item has no instructions