
Logica toepassen met CASE - Opdrachten
1. Categoriseren van acteurs op basis van geslacht
Maak de volgende query af om met CASE een kolom toe te voegen.
In deze kolom moet de volledige naam van een geslacht staan.
Dus bijvoorbeeld female in geval van geslacht F.
- Gebruik
CASE,WHEN,THEN,ELSEenEND. - Scenario's:
- Als geslacht man (
'M'):'male'. - Als geslacht vrouw (
'F'):'female'.
- Als geslacht man (
SELECT
*,
CASE
WHEN gender = 'M' THEN 'male'
WHEN gender = 'F' THEN 'female'
ELSE 'Unknown'
END
FROM
actors;
| id | first_name | last_name | gender | film_count | case |
|---|---|---|---|---|---|
| 933 | Lewis | Abernathy | M | 1 | male |
| 2547 | Andrew | Adamson | M | 1 | male |
| 2700 | William | Addy | M | 1 | male |
| ... | ... | ... | ... | ... | ... |
2. Geef een naam aan de nieuwe kolom
In de code uit de vorige vraag heb je de nieuwe kolom geen specifieke naam gegeven.
Hierdoor krijgt de kolom standaard de naam case.
Dit is niet zo duidelijk.
Hergebruik je code uit de vorige vraag, en geef de nieuwe kolom de naam gender_category.
- Maak gebruik van
AS <column_name>.
SELECT
*,
CASE
WHEN gender = 'M' THEN 'male'
WHEN gender = 'F' THEN 'female'
ELSE 'Unknown'
END AS gender_category
FROM
actors;
| id | first_name | last_name | gender | film_count | gender_category |
|---|---|---|---|---|---|
| 933 | Lewis | Abernathy | M | 1 | male |
| 2547 | Andrew | Adamson | M | 1 | male |
| 2700 | William | Addy | M | 1 | male |
| ... | ... | ... | ... | ... | ... |
3. Categoriseren op basis van aantal films
Acteurs hebben in verschillende aantallen films gespeeld.
Middels een CASE vergelijking gaan we hier onderscheid in maken.
We gaan een kolom toevoegen die afhankelijk van het aantal films (kolom film_count) waarin een acteur speelt een waarde krijgt.
- Gebruik
CASE,WHEN,THEN,ELSEenEND. - Scenario's:
- Als aantal gelijk is aan
1:'one movie'. - Anders:
'multiple movies'.
- Als aantal gelijk is aan
- Geef met
ASde nieuwe kolom een specifieke naam:film_count_category.
SELECT
*,
CASE
WHEN film_count = 1 THEN 'one movie'
ELSE 'multiple movies'
END AS film_count_category
FROM
actors;
| id | first_name | last_name | gender | film_count | film_count_category |
|---|---|---|---|---|---|
| 933 | Lewis | Abernathy | M | 1 | one movie |
| 2547 | Andrew | Adamson | M | 1 | one movie |
| 2700 | William | Addy | M | 1 | one movie |
| ... | ... | ... | ... | ... | ... |
4. Categoriseren op basis van lengte van achternaam
Acteurs hebben verschillende achternamen van verschillende lengtes.
Middels een CASE vergelijking gaan we hier onderscheid in maken.
We gaan een kolom toevoegen die afhankelijk van de lengte van de achternaam (kolom last_name) een waarde krijgt.
- Gebruik
CASE,WHEN,THEN,ELSEenEND. - Scenario's:
- Als een achternaam uit meer dan
5karakters bestaat:'long last name'. - Anders:
'short last name'.
- Als een achternaam uit meer dan
- Maak gebruik van de
LENGTH()functie. - Geef met
ASde nieuwe kolom een specifieke naam:last_name_length_category.
SELECT
*,
CASE
WHEN LENGTH(last_name) > 5 THEN 'long last name'
ELSE 'short last name'
END AS last_name_length_category
FROM
actors;
| id | first_name | last_name | gender | film_count | last_name_length_category |
|---|---|---|---|---|---|
| 933 | Lewis | Abernathy | M | 1 | long last name |
| 2547 | Andrew | Adamson | M | 1 | long last name |
| 2700 | William | Addy | M | 1 | short last name |
| ... | ... | ... | ... | ... | ... |
5. (Extra) Ophalen van data uit een kolom
Schrijf een query waarmee je een kolom toevoegt die de acteurs op basis van geslacht en aantal films categoriseert.
- Noem de nieuwe kolom
actor_category. - Scenario's:
- Als man en in 1 film gespeeld:
'male, one movie'. - Als man en in meerdere films gespeeld:
'male, multiple movies'. - Als vrouw en in 1 film gespeeld:
'female, one movie'. - Als vrouw en in meerdere films gespeeld:
'female, multiple movies'. - In andere gevallen:
other
- Als man en in 1 film gespeeld:
- Selecteer naast de nieuwe kolom alleen kolommen
id,first_nameenlast_name.
SELECT
id,
first_name,
last_name,
CASE
WHEN (
gender = 'M'
AND film_count = 1
) THEN 'male, one movie'
WHEN (
gender = 'M'
AND film_count > 1
) THEN 'male, multiple movies'
WHEN (
gender = 'F'
AND film_count = 1
) THEN 'female, one movie'
WHEN (
gender = 'F'
AND film_count > 1
) THEN 'female, multiple movies'
ELSE 'other'
END AS actor_category
FROM
actors;
| id | first_name | last_name | actor_category |
|---|---|---|---|
| 933 | Lewis | Abernathy | male, one movie |
| 2547 | Andrew | Adamson | male, one movie |
| 2700 | William | Addy | male, one movie |
| ... | ... | ... | ... |