Utiliser FILTER pour créer un tableau croisé
Dans l'exercice précédent, vous avez écrit une requête qui donnait le nombre d'infractions de stationnement (par leur code numérique) émises par chacune de quatre agences. Les résultats contenaient toute l'information voulue, mais étaient présentés dans un format où chaque violation_code était affiché 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 sous forme de tableau croisé. Cette présentation améliorée des données s'intègre plus facilement au rapport sur les contraventions de stationnement émises par chacune des quatre agences visées.
Cette activité fait partie du cours
Nettoyer des données dans des bases de données PostgreSQL
Instructions de l’exercice
- Définissez la colonne
Policecomme le nombre d'enregistrements pour chaqueviolation_codedont la valeurissuing_agencyestP. - Définissez la colonne
Sanitationcomme le nombre d'enregistrements pour chaqueviolation_codedont la valeurissuing_agencyestS. - Définissez la colonne
Parkscomme le nombre d'enregistrements pour chaqueviolation_codedont la valeurissuing_agencyestK. - Définissez la colonne
Transportationcomme le nombre d'enregistrements pour chaqueviolation_codedont la valeurissuing_agencyestV.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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