Vue d’ensemble
Dans ce rapport, nous allons explorer une requête SQL qui utilise la fonction FILTER pour segmenter les données des utilisateurs en fonction de leurs préférences de résumé d’activité. La fonction FILTER est un outil puissant en SQL qui permet l’agrégation conditionnelle au sein d’une seule requête, offrant un moyen d’appliquer des fonctions d’agrégation telles que COUNT(), SUM(), AVG(), etc., à un sous-ensemble de données.
La requête SQL expliquée
La requête SQL fournie compte le nombre d’utilisateurs ayant différents paramètres de résumé d’activité. Voici une description de chaque partie de la requête :
SELECT
COUNT(*) FILTER (WHERE uo.email_digests = false) AS "Disabled",
COUNT(*) FILTER (WHERE uo.email_digests = true) AS "Total Enabled",
COUNT(*) FILTER (WHERE uo.email_digests = true AND u.last_seen_at > CURRENT_DATE - INTERVAL '180 DAYS') AS "Skipped",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 30) AS "Half Hourly",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 60 ) AS "Hourly",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 1440) AS "Daily",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 10080) AS "Weekly",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 43200) AS "Monthly",
COUNT(*) FILTER (WHERE uo.email_digests = true AND uo.digest_after_minutes = 259200) AS "6 Monthly"
FROM user_options uo
JOIN users u ON u.id = uo.user_id
WHERE uo.user_id > 0
COUNT(*) FILTER (WHERE condition)compte le nombre de lignes qui correspondent à la condition spécifiée.- La clause
ASrenomme les colonnes de sortie pour une meilleure lisibilité. - La requête joint la table
user_optionsà la tableuserspour accéder aux paramètres et aux données d’activité de l’utilisateur. - La condition
WHERE uo.user_id > 0filtre les utilisateurs système ou les entrées non standard.
Comment fonctionne la fonction FILTER
La fonction FILTER est utilisée conjointement avec une fonction d’agrégation pour compter uniquement les lignes qui répondent à des critères spécifiques. C’est une alternative plus lisible et souvent plus efficace à l’utilisation de sous-requêtes ou d’instructions CASE pour l’agrégation conditionnelle.
Voici la syntaxe générale d’utilisation de FILTER :
AGGREGATE_FUNCTION(column_name) FILTER (WHERE condition) AS alias_name
Quand utiliser la fonction FILTER
La fonction FILTER est particulièrement utile lorsque vous devez effectuer plusieurs comptages (ou autres agrégations) avec différentes conditions dans une seule requête. Elle simplifie la requête et évite le besoin de plusieurs sous-requêtes ou d’instructions CASE complexes.
Vous pourriez utiliser la fonction FILTER pour segmenter les utilisateurs par leurs préférences, les publications par leurs réactions, ou les sujets par leurs catégories, entre autres cas d’utilisation. C’est un outil polyvalent qui peut améliorer le reporting et l’analyse des données.
Conclusion
La fonction FILTER est un ajout précieux à tout kit d’outils SQL. Elle permet une agrégation conditionnelle claire et concise, rendant les requêtes de données complexes plus gérables et compréhensibles.