Draft: Refactor: les filtres géo des expressions vont dans les CTE
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