쿼리 안의 쿼리
하위 쿼리의 결과를 상위 쿼리에서 사용
Subquery의 결과를 조건에 활용
where 필드명 in (subquery)
기존 테이블과 함께 보고싶은 통계 데이터를 쉽게 붙임
select 필드명, 필드명, (subquery) from...
subquery와 이미 존재하는 다른 테이블을 join할 때 활용
select * from table
join (subquery) s on ...
subquery를 with절로 깔끔하게 쿼리문 정리
with table1 as (subquery)
select * from table1 ...
SUBSTRING_INDEX(문자열, 구분자, 위치)
// 1 : 구분자 기준으로 텍스트를 쪼개고 첫 번째 조각 사용
// -1 : 마지막 조각 사용
SUBSTRING(문자열, 시작 지점, 글자수)
경우에 따라 원하는 값을 새 필드에 출력
select *
case when (조건) then (출력)
else (출력)
end as (별칭)
from ...
[예시] case, with절 예시
with table1 as (
select pu.point_user_id, pu.point,
case
when pu.point >= 10000 then '1만 이상'
when pu.point >= 5000 then '5천 이상'
else '5천 미만'
END as level
from point_users pu
)
select level, count(*) as cnt from table1
group by level
[퀴즈1] course_id별 유저의 체크인 개수, 전체 인원 대비 비율 구하기
1. course_id별 유저의 체크인 개수 구하기
2. course_id별 인원 구하기
3. 2번을 subquery로 1번에 join 하기
4. 비율을 구하기 위해 cnt_chkins / cnt_total
5. course 테이블과 join 하여 강의 title 표시
select c2.title,
count(DISTINCT user_id) as cnt_checkins,
a.cnt_total,
(count(DISTINCT user_id) / cnt_total) as ratio
from checkins c
inner join (
select course_id, count(*) as cnt_total from orders o
group by course_id
) as a on a.course_id = c.course_id
inner join courses c2 on c.course_id = c2.course_id
group by c.course_id
[퀴즈2] 이메일 도메인별 유저수 세기
select SUBSTRING_INDEX(email,'@',-1) as domain, count(*) as cnt
from users
group by domain