[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개의 댓글

관련 채용 정보