스파르타/SQL

SQL_4주차_실전에서 유용한 SQL 문법

옒르 2023. 1. 16. 13:03

1) 문자열 

(1) 문자열 쪼개보기 -> Substring_index(필드명, 특정 기준 문자, 시작포인트)

이메일에서 아이디만 가져와보기

 # substrinig_index(____, '@',1) -> @ 앞에 있는 문자들을 추출해라 -> 이메일 추출

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

이메일에서 이메일 도메인만 가져와보기

 # 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

)  -> # 조건을 포함한 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