Utilisation de FILTER pour résumer les données

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 AS renomme les colonnes de sortie pour une meilleure lisibilité.
  • La requête joint la table user_options à la table users pour accéder aux paramètres et aux données d’activité de l’utilisateur.
  • La condition WHERE uo.user_id > 0 filtre 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.

4 « J'aime »