Ga naar inhoud

Header

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, ELSE en END.
  • Scenario's:
    • Als geslacht man ('M'): 'male'.
    • Als geslacht vrouw ('F'): 'female'.
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
... ... ... ... ... ...
Columns: 6
Rows: 1.907




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
... ... ... ... ... ...
Columns: 6
Rows: 1.907




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, ELSE en END.
  • Scenario's:
    • Als aantal gelijk is aan 1: 'one movie'.
    • Anders: 'multiple movies'.
  • Geef met AS de 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
... ... ... ... ... ...
Columns: 6
Rows: 1.907




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, ELSE en END.
  • Scenario's:
    • Als een achternaam uit meer dan 5 karakters bestaat: 'long last name'.
    • Anders: 'short last name'.
  • Maak gebruik van de LENGTH() functie.
  • Geef met AS de 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
... ... ... ... ... ...
Columns: 6
Rows: 1.907




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
  • Selecteer naast de nieuwe kolom alleen kolommen id, first_name en last_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
... ... ... ...
Columns: 4
Rows: 1.907