[where 절과 자주 함께 쓰이는 문법!]
① '같지 않음' 조건 !=
느낌표는 부정을 의미함.
*(예시) payment_method 필드에서 kakaopay 제외하고 보고싶어.
select * from orders where payment_method != 'kakaopay'
② '범위' 조건 between
*(예시) created_at 필드에서 7월 13일~7월 14일 주문데이터만 보고싶어.
select * from orders where created_at between '2020-07-13' and '2020-07-15'
③ '포함' 조건 in
*(예시) 1,3,5주차 사람들의 '오늘의 다짐'만 보고싶어.
select * from orders where week in (1,3,5)
④ '패턴(문자열규칙)' 조건 like
*(예시) gmail을 사용하는 유저만 보고싶어.
select * from orders where email like '%gmail.com'
※ 문구 앞/뒤에 %를 붙이면, %앞/뒤 값을 포함하는 모든 데이터 라는 의미임.
[Group by 와 자주 함께 쓰이는 문법!]
① 동일한 범주에서 '최솟값' 구하기 Min
*(예시) 주차별 '오늘의 다짐'의 좋아요 최솟값이 궁금해.
select week, min(likes) from checkins group by week
② 동일한 범주에서 '최댓값' 구하기 Max
*(예시) 주차별 '오늘의 다짐'의 좋아요 최댓값이 궁금해.
select week, max(likes) from checkins group by week
③ 동일한 범주에서 '평균값' 구하기 Avg
*(예시) 주차별 '오늘의 다짐'의 좋아요 평균값이 궁금해.
select week, avg(likes) from checkins group by week
④동일한 범주에서 '합계' 구하기 Sum
*(예시) 주차별 '오늘의 다짐'의 좋아요 합계가 궁금해.
select week, sum(likes) from checkins group by week
[실전에서 유용한 SQL문법]
실전에서는 원하는 형태의 문자열이 존재하지 않는 경우가 많음. ⇒ 쪼개거나 변형이 필요함.
1-1. 문자열 쪼개보기 : SUBSTRING_INDEX
이메일에서 '@'를 기준으로, 뒤에 붙은 문구만 출력
: select user_id , email, SUBSTRING_INDEX(email,'@',-1) from users
SUBSTRING_INDEX(출력할 필드,'기준이 되는 문구',1(앞) 또는 -1(뒤))
1-2. 문자열의 일부만 출력하기 : substring
created_at에서 일자만 출력
Substring('출력할 필드', '시작 포인트'와 '시작포인트로부터 몇 글자까지 출력할건지')
select order_no , created_at, SUBSTRING(created_at, 1, 10) as date from orders
매일 몇 개의 주문이 들어왔는지 세고싶다면? date로 묶고 count
select order_no , created_at, SUBSTRING(created_at, 1, 10) as date, count(*) from orders
group by date
2. 조건문(CASE문): 경우에 따라 원하는 값을 필드에 출력해줌.
2-1. 포인트에 따른 메세지 출력
select pu.user_id, pu.point,
(case when pu.point > 10000 then '잘 하고 있어요'
else '조금만 더 파이팅!' END) as msg
from point_users pu
2-2. 포인트에 따른 레벨 구분
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
3. 포인트에 따라 구분된 레벨별 숫자
select a.Lv, count(*) as cnt from (
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
) a
group by a.lv
4. with절을 이용해 깔끔히 정리
with table1 as
(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 )
select a.Lv, count(*) as cnt from table1 a
group by a.lv
'스터디 > SQLD' 카테고리의 다른 글
[SQL] 3주차 강의노트 - 스파르타 코딩클럽 (0) | 2023.03.30 |
---|---|
[SQL] 2주차 강의노트 - 스파르타 코딩클럽 (0) | 2023.03.19 |
[SQL] 1주차 강의노트 - 스파르타 코딩클럽 (0) | 2023.03.18 |