https://solvesql.com/problems/summary-of-artworks-in-3-years/
🔍 문제
2014년~2016년도 까지 수집된 작품의 개수를 분류에 맞춰서 집계하기!
🎯정답
SELECT
classification,
count(*) filter (where to_char(acquisition_date, 'YYYY') = '2014') as "2014",
count(*) filter (where to_char(acquisition_date, 'YYYY') = '2015') as "2015",
count(*) filter (where to_char(acquisition_date, 'YYYY') = '2016') as "2016"
from artworks
group by classification
order by classification;
❓풀이
- postgresql 에서는 `FILTER` 기능을 통해서 `SELECT`문 안에 원하는 필터링 조건을 생성할 수 있다.
- 또 다른 풀이 방법을 찾아보다가 이걸 발견했다.
SELECT
classification,
SUM(CASE WHEN TO_CHAR(acquisition_date, 'YYYY') = '2014' THEN 1 ELSE 0 END) AS "2014",
SUM(CASE WHEN TO_CHAR(acquisition_date, 'YYYY') = '2015' THEN 1 ELSE 0 END) AS "2015",
SUM(CASE WHEN TO_CHAR(acquisition_date, 'YYYY') = '2016' THEN 1 ELSE 0 END) AS "2016"
FROM artworks
GROUP BY classification
ORDER BY classification;
- `CASE ~ WHEN` 구문을 활용해서 각각의 연도에 해당하면 1을 더해주면 개수를 집계할 수 있다.
'프로그래밍 언어 > 02. SQL' 카테고리의 다른 글
| [PostgreSQL] solvesql LV.3 배송 예정일 예측 성공과 실패 (0) | 2025.10.11 |
|---|---|
| [PostgreSQL] solvesql LV.3 할부는 몇 개월로 해드릴까요 (0) | 2025.10.10 |
| [PostgreSQL] solvesql LV.2 언더스코어(_)가 포함되지 않은 데이터 찾기 (0) | 2025.10.07 |
| [PostgreSQL] solvesql LV.2 다음날도 서울숲의 미세먼지 농도는 나쁨 (0) | 2025.10.07 |
| [PostgreSQL] solvesql LV.6 카테고리 별 매출 비율 (0) | 2025.10.07 |
