Subquery’s

Gegevens manipuleren in Snowflake

Jake Roach

Field Data Engineer

Wat zijn subquery’s?

Subquery’s laten je het resultaat van de ene query gebruiken in een andere.

$$

  • Combineer meerdere queries
  • Focus op leesbaarheid
  • Zorgt voor modulariteit
  • Maakt bewerken makkelijker!

$$

FROM ( ... ) of WHERE ... IN ( ... )

Logisch proces om data leesbaarder en modulairder te bewerken met subquery’s

Gegevens manipuleren in Snowflake

Subquery’s en FROM

SELECT
    ...
-- Haal op uit een query, niet uit een tabel
FROM (

    -- Maak een resultset die 
    -- door de hoofdquery wordt gebruikt
    SELECT 
        <fields>
    FROM <table>
    WHERE ...

);

Haal data op uit het resultaat van een andere query in plaats van direct uit een tabel.

$$

  • Ontkoppel bewerking van analyse
  • Maakt queries makkelijker te lezen en te begrijpen
  • Zorgt voor “portabiliteit” en makkelijkere wijzigingen
  • JOIN, WHERE, enz.
Gegevens manipuleren in Snowflake

Voor een subquery

SELECT
    month_num,
    -- windchill - temperature moet hier twee keer; wat als dit wijzigt?
    AVG(windchill - temperature) AS avg_differential
    MIN(windchill - temperature) AS most_differential
FROM weather
WHERE 
    -- Filteren gebeurt in dezelfde query als aggregatie/analyse
    season = 'Winter' AND
    temperature < 32
GROUP BY month_num;
Gegevens manipuleren in Snowflake

Na een subquery

-- Begin met de subquery, aggregeer daarna

SELECT month_num, AVG(differential) AS avg_differential MIN(differential) AS most_differential FROM (
SELECT month_num, windchill - temperature AS differential FROM weather WHERE season = 'Winter' AND temperature < 32
) GROUP BY month_num;
          | month_num | differential |
          | --------- | ------------ |
          |     12    |      -12     |
          |     1     |      -3      |
          |     1     |       0      |
          |     2     |      -7      |
| month_num | avg_differential | most_differential |
| --------- | ---------------- | ----------------- |
|     12    |       -5.77      |        -14        |
|     1     |       -1.91      |        -8         |
|     2     |       -8.13      |        -22        |

De analyse is na het opschonen makkelijk te begrijpen en aan te passen.

Gegevens manipuleren in Snowflake

WHERE ... IN ( ... )

...

-- Filter op records met een waarde in 
-- het resultaat van de subquery
WHERE <field> IN (

    SELECT <other-field> FROM ... 

);

Maak een kleine resultset om te gebruiken bij transformaties, filters of bewerkingen.

$$

  • Filter records die IN een niet-constante set vallen
  • Ook elders in een query te gebruiken
  • AVG, MAX, MIN, enz.
Gegevens manipuleren in Snowflake

WHERE ... IN( ... )

SELECT
    todays_date,
    temperature,
    status
FROM weather
WHERE todays_date IN (  -- Filter op alle dagen met gewonnen thuiswedstrijden

    SELECT
        game_date
    FROM game_schedule
    WHERE stadium = 'Home' AND did_win = TRUE

);
Gegevens manipuleren in Snowflake

WHERE ... IN ( ... )

Resultaatset voor een query met een subquery om weerdata per thuiswedstrijd te vinden

Gegevens manipuleren in Snowflake

Laten we oefenen!

Gegevens manipuleren in Snowflake

Preparing Video For Download...