1) 문자열
(1) 문자열 쪼개보기 -> Substring_index(필드명, 특정 기준 문자, 시작포인트)
✅ 이메일에서 아이디만 가져와보기
# substrinig_index(____, '@',1) -> @ 앞에 있는 문자들을 추출해라 -> 이메일 추출
select user_id ,email, SUBSTRING_INDEX(email,'@',1) from users u

✅ 이메일에서 이메일 도메인만 가져와보기
# substrinig_index(____, '@',-1) -> @ 뒤에 있는 문자들을 추출해라 -> 도메인 추출
select user_id ,email, SUBSTRING_INDEX(email,'@',-1) from users u
(2) 문자열 일부만 출력하기 -> Substring(필드명, 시작포인트, 몇자 나타낼지)
✅ orders 테이블에서 날짜까지 출력하게 해보기
select order_no, created_at ,SUBSTRING(created_at,1,10) from orders o

✅ 일별로 몇 개씩 주문이 일어났는지 살펴보기
select SUBSTRING(created_at,1,10) as date, count(*) from orders o
group by date

+ if) 시간을 기준으로 데이터를 분할하고 싶다면? -> Substring(필드명, 시작포인트, 몇자 나타낼지)
select SUBSTRING(created_at,12,8) as hour from orders o
2) CASE
(1) 경우에 따라 원하는 값을 새 필드에 출력해보기
✅ 포인트 보유액에 따라 다르게 표시해주기
select pu.user_id , pu.point,
(case when pu.point > 10000
then '잘 하고 있어요!'
else
'조금만 더 파이팅!' end) as msg
from point_users pu

(2) 실전을 위한 트릭!
👉 Subquery를 이용하면 이런 통계도 낼 수 있어요!
✅ 특정 조건에 해당하는 그룹별 개수 추출하기
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 -> # 조건을 포함한 elect문를 a로 치완
group by a.lv

✅ 특정 조건에 해당하는 그룹별 개수 추출하기(case, when을 사용해서 정리하기)
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 # 앞으로 조건을 포함하는 select문을 table1 a로 치완함
group by a.lv

'스파르타 > SQL' 카테고리의 다른 글
SQL_ 강의 후기 (0) | 2023.01.16 |
---|---|
SQL_4주차_복습 (0) | 2023.01.16 |
SQL_4주차_Subquery 연습문제 (0) | 2023.01.16 |
SQL_4주차_Subquery (1) | 2023.01.13 |
SQL_3주차_숙제 (0) | 2023.01.12 |