[PostgreSQL || SQL] SELECT절에서 여러 개의 카운트 (다중 카운트)

닷츠·2023년 4월 14일
0

SQL

목록 보기
1/2
post-thumbnail

여기 인스타그램 테이블 2개가 있다고 가정해봅니다.

하나는 인스타그램의 유저 정보를
또 다른 하나는 각 유저가 생성한 포스트의 정보를 담고 있습니다.
nuring 저 사람은 인스타그램 중독인가봐요...

이해를 돕기 위해 users 테이블도 준비했는데요
아래 예시부터는 join을 생략하고 posts 테이블만으로 설명하겠습니다.

Q1. 유저별로 스토리의 개수를 카운트 하세요

간단하죠.
FROM 해당 posts 데이터베이스에서
WHERE contents 값이 스토리라는 조건을 걸고
select 그에 맞는 포스트만 count해서 컬럼으로 보여줘,하면 됩니다.

select
	p_table.user_id
	count(id)
from
	posts as p_table
where
	p_table.contents = '스토리'
group by
	p_table.user_id

물론 group by 유저별로 묶어줘야 아래처럼 집계가 가능합니다.

Q2. 유저별로 스토리와 게시물의 개수를 한 번에 카운트 하세요

이번엔 해당 질문에 따라 추출한 결과 표를 먼저 볼게요.

FROM posts 데이터베이스에서
select 각각 조건이 다른 카운트 두 개 이상을 한 번에 보려면
어떻게 해야 할까요???

제가 찾은 방법은 select절에서 CASE 구문을 사용하는 것입니다.

select
	p_table.user_id,
	count(CASE WHEN p_table.contents = '게시물' THEN 1 END) as count_게시물,
	count(CASE WHEN p_table.contents = '스토리' THEN 1 END) as count_스토리
from
	posts as p_table
group by
	p_table.user_id

여기서 핵심인 CASE문만 다시 들여다볼게요

CASE문 안에서 각각 조건을 넣기 때문에
쿼리문 전체에 적용되는 where절의 조건은 빠졌습니다.
그리고 리턴한 1의 개수를 세거나, 합하는 결과는 같기에
COUNT 대신 SUM 함수를 사용하셔도 무방합니다.

혹시나 더 나은 방법을 알고 계신 분이 있다면
댓글로 남겨주세요 :)

정말 초보 혹은 비전공자 분을 위해 덧붙이면,
쿼리문 상의 별칭 여부 및 네이밍은 자유입니다!


참고:
https://java119.tistory.com/36
https://stackoverflow.com/questions/12789396/how-can-i-get-multiple-counts-with-one-sql-query

profile
* 2024.1.6 부로 https://nuringdots.tistory.com/ 에서 통합 운영합니다.

0개의 댓글