Utiliser FILTER pour créer un tableau croisé
Dans l’exercice précédent, vous avez écrit une requête donnant le nombre d’infractions de stationnement (par leur code numérique) émises par chacune des quatre agences. Les résultats contenaient toutes les informations souhaitées, mais étaient présentés dans un format qui affichait chaque violation_code en double jusqu’à quatre fois (pour chaque issuing_agency sélectionnée). On peut obtenir une représentation plus compacte des mêmes données en créant un tableau croisé.
Dans cet exercice, vous allez écrire une requête utilisant la clause FILTER pour produire des résultats au format tableau croisé. Cette présentation améliorée des données pourra plus facilement être utilisée dans le rapport sur les infractions de stationnement émises par chacune des quatre agences étudiées.
Cet exercice fait partie du cours
Nettoyer des données dans des bases PostgreSQL
Instructions
- Définissez la colonne
Policecomme le nombre d’enregistrements pour chaqueviolation_codeavec une valeurissuing_agencyégale àP. - Définissez la colonne
Sanitationcomme le nombre d’enregistrements pour chaqueviolation_codeavec une valeurissuing_agencyégale àS. - Définissez la colonne
Parkscomme le nombre d’enregistrements pour chaqueviolation_codeavec une valeurissuing_agencyégale àK. - Définissez la colonne
Transportationcomme le nombre d’enregistrements pour chaqueviolation_codeavec une valeurissuing_agencyégale àV.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
SELECT
violation_code,
-- Define the "Police" column
COUNT(issuing_agency) FILTER (WHERE issuing_agency = '___') AS "Police",
-- Define the "Sanitation" column
COUNT(___) FILTER (WHERE ___ = '___') AS "___",
-- Define the "Parks" column
___(___) ___ (WHERE ___ = '___') AS "___",
-- Define the "Transportation" column
___(___) ___ (___ ___ = '___') AS "___"
FROM
parking_violation
GROUP BY
violation_code
ORDER BY
violation_code