[SQL] 날짜별 인원수 구하기

서현서현·2022년 8월 29일
0

DB, SQL

목록 보기
21/27

기존 테이블은 이런식으로 생겼다

간단히 설명하자면, 이 테이블에 데이터가 들어오는 경우는 두가지이다.
1) 예약을 통해
2) 현장 주문을 통해

1번의 경우 RESV_ID가 외래키로 존재하며, 2번의 경우는 예약이 아니므로 null이 들어올 예정이다. 그리고 중요한건 PCNT!
위 테이블은 한 주문에 대해 여러행이 들어오게 설계되어있는데, 따라서 한 주문 = 여러메뉴 = 같은 인원수 이렇게 된다, 같은 MOREDER_ID = 여러 MENU_ID(따라서 행이여러개) = 같은 PCNT 가 되는것이다.

결론은 MORDER_ID별로 그룹을 나눈뒤 해당그룹의 PCNT를 단 하나만 읽어주면 된다. 거기에 날짜기준까지 더해주면 쿼리 완성임!

결론부터 말하자면 다음과 같이 짰다

-- 특정 가맹점의 전체 방문인원
select max(pcnt) as 인원수, MORDER_DATE as 날짜
from MORDER
where fran_id='CB2022901'and MORDER_DATE >= '2022/08/01' and MORDER_DATE < '2022/09/01'
group by morder_id, MORDER_DATE
order by morder_id desc;

-- 특정 가맹점의 예약자 인원
select max(pcnt) as 인원수, MORDER_DATE as 날짜
from MORDER
where fran_id='CB2022901' and RESV_ID is not null
        and MORDER_DATE >= '2022/08/01' and MORDER_DATE < '2022/09/01'
group by morder_id, MORDER_DATE
order by morder_id desc;

group by는 집계함수이므로 덜렁 컬럼명만 쓰면 못가져오더라. 어차피 그룹별로 묶었을때 pcnt는 모두 같으므로 MAX를 사용하게 해서 해결했다.

날짜비교는 해석해보면 보이겠지만, where절에서 MORDER_DATE에 대한 범위를 지정해주고, group by절에서 DATE로 묶어준다.

그럼 이렇게 나온다!!


오잉? 그런데 날짜가 같은게 여러번 나온다. 왜냐?
저거 컬럼 열어보면 시간단위가 다름 ㅋㅋ 그래서 따로나오고있다

0개의 댓글