유용 SQL

서재환·2022년 2월 10일
0

DB

목록 보기
10/13

문자열

select order_no, created_at, substring(created_at,1,10) as date from orders
orders 라는 테이블에서 각각의 field를 뽑아내고 그중 created_at field는 첫번째 위치부터 10번째
위치까지의 값만을 뽑아내고 해당 field를 date로 명명한다.
select user_id, email, SUBSTRING_INDEX(email, '@', -1) from users
users라는 테이블에서 user_id, email field를 추출하고 email field의 경우 '@'를 기준으로 뒤에 
있는 값을 추출하여 field를 구성하도록 한다. 1로 바꿔서 쓸 경우 '@'를 기준으로 앞 부분을 추출해서 필
드를 구성한다.

Case

select pu.point_user_id, pu.point,
case 
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;
point_users 테이블을 pu로 칭하고 해당 테이블에서 point, user_id field를 추출 할 것이다. 그런데
point의 경우 따로 '구분'이라는 column을 설정해 주어서 10,000 점이 보다 높은 point에 대해서 '잘 하
고 있어요'라고 값을 줄 것이고 그렇지 않을 경우 '조금 더 달려주세요!'라고 값을 줄 것이다.
select level, count(*) as cnt from (
	select pu.point_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 lv
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 lv
	from point_users pu
)

select level, count(*) as cnt from table1
group by lv

0개의 댓글