23.04.07
subquery(query문 안에 들어가는 query문)사용법 (tab키를 이용해 들여쓰기 신경쓰기)
1. where 문에서 이용
SELECT * from users u
WHERE user_id in (
select user_id from orders o
WHERE payment_method = 'kakaopay'
)
2. select 문에서 이용
select checkin_id,
user_id ,
likes,
(
select avg(likes) from checkins c
where user_id = c.user_id
) as avg_likes_user
from checkins
3. inner join 문에서 이용
select pu.user_id, pu.point from point_users pu
inner join (
select user_id, round(avg(likes),1) as avg_likes from checkins c
group by user_id
) a on pu.user_id = a.user_id
subquery문을 테이블 a로 두고 pu의 user_id와 a의 user_id를 기준으로 이음
with를 이용해서 subquery에 임의의 이름을 만들어서 쿼리문을 더 간결하게 만들어준다
ex)
select c.title,
a.cnt_checkins,
b.cnt_total,
(a.cnt_checkins/b.cnt_total) as ratio
from
(
select course_id, count(distinct(user_id)) as cnt_checkins from checkins
group by course_id
) a
inner join
(
select course_id, count(*) as cnt_total from orders
group by course_id
) b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id
||
||
||
||
||
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
substring_index - 문자열 쪼개기
substring_index(쪼갤 문자열,'기준',1(기준 앞 문자열) or -1(기준 뒤 문자열))
ex)
select user_id, email, SUBSTRING_INDEX(email,'@',-1) from users u
substring - 문자열 분리하기
substring(분리할 문자열,분리 시작 위치,분리 끝날 위치)
ex)
select SUBSTRING(created_at,1,10) as date, count(*) from orders o
case - 경우에 따라 원하는 값을 새 필드에 출력하기 (js의 if문과 비슷한 느낌)
ex)
select pu.user_id, pu.point,
(case when pu.point > 10000 then '1만 이상'
when pu.point > 5000 then '5천 이상'
else '5천 미만' end) as lv
from point_users pu
마침내 SQL에 대해 기본적인 공부는 마쳤다
부트캠프가 끝나고, 혹은 실무 중에라도 정보처리기능사, 정보처리기사 자격증을 따기 위한 기반을 다진 것이다
후련하지만, 한편으로는 배운 내용들을 당분간 써먹지 않을텐데, 잊진 않을까 불안하다
나중을 위해서라도 이 일기를 되돌아보며 복습을 해야 할 것이다