SQL에서 조건별 집계 값을 구할 때, 보통 CASE WHEN을 많이 사용하죠.
하지만 쿼리가 길어지거나, 조건이 반복되면 가독성이 떨어질 수 있어요.
그럴 때 FILTER (WHERE ...) 문법을 쓰면 더 깔끔하게 표현할 수 있습니다.
-- ✅ FILTER 사용
SELECT
COUNT(*) FILTER (WHERE gender = 'M') AS male_users,
COUNT(*) FILTER (WHERE gender = 'F') AS female_users
FROM users;
위 쿼리는 남성과 여성 유저 수를 한 번에 구해줍니다.
같은 결과를 CASE WHEN으로도 구할 수 있지만…
-- ✅ CASE WHEN 사용
SELECT
COUNT(CASE WHEN gender = 'M' THEN 1 END) AS male_users,
COUNT(CASE WHEN gender = 'F' THEN 1 END) AS female_users
FROM users;
조건이 많아질수록 FILTER 방식이 더 읽기 쉬울 때가 있습니다.
FILTER는 모든 DB에서 지원하는 건 아닙니다.
✔️ FILTER는 집계 함수에 적용할 조건을 별도로 분리할 수 있어, 쿼리를 더 읽기 쉽게 만들어줍니다.
✔️ 단, 사용하는 데이터베이스 환경에서 지원 여부는 꼭 확인하세요.