Skip to content

Draft: Refactor: les filtres géo des expressions vont dans les CTE

Ronan Amicel requested to merge refactor-indicateurs-expressions into main

Précédemment, le SQL généré pour un indicateur expression appliquait les filtres géographiques au niveau extérieur, ce qui nécessitait que chaque CTE expose non seulement la valeur de l’indicateur, mais aussi une colonne correspondant à la dimension géographique, le tout aggrégé avec un GROUP BY :

    WITH
        un_autre_indicateur AS (
            SELECT
                SUM(value) AS value, insee_dep
            FROM
                un_autre_jeu_de_donnees
            GROUP BY insee_dep
        ),
        un_indicateur AS (
            SELECT
                COUNT(value) AS value, insee_dep
            FROM
                un_jeu_de_donnees
            GROUP BY insee_dep
        )
    SELECT
        CAST(un_indicateur.value AS FLOAT) / NULLIF(CAST(un_autre_indicateur.value AS FLOAT), 0)
    FROM
        un_autre_indicateur
    FULL JOIN
        un_indicateur
    ON un_indicateur.insee_dep = un_autre_indicateur.insee_dep
    WHERE
        un_autre_indicateur.insee_dep = :code
        OR un_indicateur.insee_dep = :code

Désormais, on applique le filtre géographique associé à l’intérieur de chaque CTE, de manière à simplifier la requête :

    WITH un_autre_indicateur AS (
        SELECT
            SUM(value)
        FROM
            un_autre_jeu_de_donnees
        WHERE
            un_autre_jeu_de_donnees.insee_dep = :code
    ),
    un_indicateur AS (
        SELECT
            COUNT(value)
        FROM
            un_jeu_de_donnees
        WHERE
            un_jeu_de_donnees.insee_dep = :code
    )
    SELECT
        CAST("un_indicateur" AS REAL) / NULLIF(CAST("un_autre_indicateur" AS REAL), 0)
    FROM
        un_autre_indicateur,
        un_indicateur
Edited by Ronan Amicel

Merge request reports