다음과 같이 쿼리문이 있을 때, SubQuery가 많아 복잡해보입니다. 여기서 계속 SubQuery가 붙으면 알아보기에도 어려울 것입니다.
select c.title, b.cnt_checkins, a.cnt_total, (b.cnt_checkins/a.cnt_total) as ratio from
(
select course_id, count(*) as cnt_total from orders
group by course_id
) a
inner join (
select course_id, count(distinct(user_id)) as cnt_checkins from checkins
group by course_id
) b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id
SubQuery를 따로 테이블로 만들어 두고, 테이블명만으로 join을 하면 더욱 깔끔하지 않을까요?
이런 경우, With를 사용할 수 있습니다.
With는 가장 상단에 정의해주어야 합니다.
with table1 as (
select course_id, count(distinct(user_id)) as cnt_checkins from checkins
group by course_id
),
table2 as (
select course_id, count(*) as cnt_total from orders
group by course_id
)
select c.title,
a.cnt_checkins,
b.cnt_total,
(a.cnt_checkins/b.cnt_total) as ratio
from table1 a inner join table2 b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id
이전보다 정리된 모습을 볼 수 있습니다.
728x90
'DB > SQL' 카테고리의 다른 글
[DB/SQL] CASE, WHEN, THEN, ELSE 사용하기 (0) | 2023.03.21 |
---|---|
[SQL] SUBSTRING_INDEX, SUBSTRING 문자열 데이터 다루기 (0) | 2023.03.21 |
[DB/SQL] SubQuery - Select, Where, From절에서 사용하기 (0) | 2023.03.21 |
[DB/SQL] UNION, UNION ALL 쿼리 결과 합치기 (0) | 2023.03.21 |
[DB/SQL] 테이블 Join, Inner Join과 Left Join이란? 예시를 통해 알아보자 (0) | 2023.03.21 |