개요
이 보고서는 FILTER 함수를 사용하여 사용자의 활동 요약 설정에 따라 사용자 데이터를 세분화하는 SQL 쿼리를 살펴봅니다. FILTER 함수는 단일 쿼리 내에서 조건부 집계(conditional aggregation)를 수행할 수 있게 해주는 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 도구 모음에 귀중한 추가 요소입니다. 명확하고 간결한 조건부 집계를 가능하게 하여 복잡한 데이터 쿼리를 더 관리 가능하고 이해하기 쉽게 만듭니다.