概要
このレポートでは、アクティビティサマリーのプリファレンスに基づいてユーザーデータをセグメント化するために FILTER 関数を使用する SQL クエリについて説明します。FILTER 関数は SQL の強力なツールであり、単一のクエリ内で条件付き集計を可能にし、COUNT()、SUM()、AVG() などの集計関数をデータサブセットに適用する方法を提供します。
SQL クエリの説明
提供された SQL クエリは、さまざまなアクティビティサマリー設定を持つユーザーの数をカウントします。クエリの各部分の内訳は次のとおりです。
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)は、指定された条件に一致する行の数をカウントします。AS句は、読みやすくするために出力列の名前を変更します。- このクエリは
user_optionsテーブルとusersテーブルを結合して、ユーザー設定とアクティビティデータにアクセスします。 WHERE uo.user_id > 0条件は、システムユーザーまたは標準外のエントリを除外します。
FILTER 関数の仕組み
FILTER 関数は、集計関数と組み合わせて使用され、特定の基準を満たす行のみをカウントします。これは、条件付き集計のためにサブクエリまたは CASE ステートメントを使用するよりも、読みやすく、多くの場合より効率的な代替手段です。
FILTER を使用する場合の一般的な構文は次のとおりです。
AGGREGATE_FUNCTION(column_name) FILTER (WHERE condition) AS alias_name
FILTER 関数の使用時期
FILTER 関数は、単一のクエリで異なる条件を持つ複数のカウント(またはその他の集計)を実行する必要がある場合に特に役立ちます。クエリが簡略化され、複数のサブクエリや複雑な CASE ステートメントの必要性が回避されます。
FILTER 関数を使用して、プリファレンスによるユーザーのセグメント化、リアクションによる投稿のセグメント化、カテゴリによるトピックのセグメント化など、さまざまなユースケースで活用できます。データレポートと分析を強化できる汎用性の高いツールです。
結論
FILTER 関数は、SQL ツールキットに貴重な追加機能です。明確で簡潔な条件付き集計を可能にし、複雑なデータクエリをより管理しやすく、理解しやすくします。