Expressions de table communes

Manipulation de données dans Snowflake

Jake Roach

Field Data Engineer

Expressions de table communes

Les expressions de table communes (CTE) stockent temporairement les résultats d'une requête pour être réutilisés par une autre requête

$$

  • Les CTE sont définies au début d'une requête
  • WITH <cte-name> AS ( <query> )
  • Semblables aux sous-requêtes
-- Indiquez le nom de la CTE,
-- suivi de la requête entre parenthèses
WITH <cte-name> AS (
    <query>
)


SELECT ... FROM <cte-name> ... ;
Manipulation de données dans Snowflake

Rapports sur les élèves à risque

WITH at_risk AS (
    SELECT
        student_id
        course_name,
        teacher_name,
        grade
    FROM student_courses
    WHERE grade < 70 AND is_required
)

SELECT students.student_name, at_risk.* FROM at_risk JOIN students ON at_risk.student_id = students.id;

$$

  • Résultats temporaires stockés dans at_risk
  • Sélection d'un sous-ensemble d'enregistrements
  • Interroger at_risk pour générer un rapport

$$

$$

$$

Manipulation de données dans Snowflake

Rapports sur les élèves à risque

Affichage des résultats d'une CTE avec le sous-ensemble et le rapport final

Manipulation de données dans Snowflake

Comparer sous‑requêtes et CTE

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;
WITH daily_temperature_differential AS (
    SELECT
        month_num,
        windchill - temperature AS differential
    FROM weather
    WHERE 
        season = 'Winter' AND 
        temperature < 32
)

SELECT
    month_num,
    AVG(differential) AS avg_differential
    MIN(differential) AS most_differential
FROM daily_temperature_differential
GROUP BY month_num;
Manipulation de données dans Snowflake

Trouver l'écart de température

WITH daily_temperature_differential AS (
    SELECT
        month_num,
        windchill - temperature AS differential
    FROM weather
    WHERE 
        season = 'Winter' AND 
        temperature < 32
)

SELECT month_num, AVG(differential) AS avg_differential MIN(differential) AS most_differential FROM daily_temperature_differential GROUP BY month_num;
          | month_num | differential |
          | --------- | ------------ |
          |     12    |      -12     |
          |     1     |      -3      |
          |     1     |       0      |
          |     2     |      -7      |

La progression est plus naturelle qu'avec des sous‑requêtes.

| month_num | avg_differential | most_differential |
| --------- | ---------------- | ----------------- |
|     12    |       -5.77      |        -14        |
|     1     |       -1.91      |        -8         |
|     2     |       -8.13      |        -22        |
Manipulation de données dans Snowflake

Passons à la pratique !

Manipulation de données dans Snowflake

Preparing Video For Download...