실전에서 유용한 SQL

진이진이·2022년 5월 25일
0
post-thumbnail
post-custom-banner

🎈문자열

  • SUBSTRING_INDEX

1.1 이메일에서 아이디만

select SUBSTRING_INDEX(email, '@', 1) from users

결과값 : email에서 @ 앞부분만 출력

1.2. 이메일 도메인만

select SUBSTRING_INDEX(email, '@', -1) from users

결과값 : email에서 @ 뒷부분만 출력

  • SUBSTRING_INDEX

2.1 orders 테이블에서 날짜까지 출력

select created_at, 
substring(created_at,1,10) as date    # created_at 값에서 첫번째부터 열번째까지 출력한 값을 date로
from orders

결과값 : creat_at 컬럼에서 10번째까지출력

2.2 일별로 주문 갯수 세기

select substring(created_at,1,10) as date, 
count(*) as cnt_date from orders              # 해당 date에 해당하는 전체 count값
group by date

결과값 : 해당하는 날짜에 count값 출력

🎈case문

  • Case ( if문과 비슷 )

1.1 경우에 따라 원하는 값 새 필드에 출력

select pu.point_user_id, pu.point,
case 
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;

결과값 :

1.2 subquery로 case로 통계 내기

select level, count(*) as cnt from 
(                                             # a라는 테이블 값을 임의로 생성해서
	select pu.point_user_id, pu.point,          level로 지정한 값을 group by 묶고
	(case                                       묶은 level의 값을 count로 나타냄
	when pu.point > 10000 then '1만 이상'
	when pu.point > 5000 then '5천 이상'
	else '5천 미만'
	END) as level
	from point_users pu
) a
group by level

서브쿼리 결과값 :

group by로 묶었을 때 통계값:

with절로 보기좋게 표현

with point_level as                          # alias와 비슷하게 사용
(             
select pu.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 point_level
group by level
profile
개발 어린이
post-custom-banner

0개의 댓글