본문 바로가기

Week I Learned

[SQL]개발일지(스파르타코딩국비교육4주차-2)실전에서 유용한 SQL문법(문자열,Case)

문자열 데이터 다루기

쪼개기 :SUBSTRING_INDEX 

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

email 컬럼을 @을 기준으로 1번째거를 가져와줘(앞에는 1 뒤에는 -1임)

 

문자열 일부만 출력하기 : SUBSTRING

SELECT order_no, created_at, SUBSTRING(created_at, 1, 10) as date  FROM orders o

 substring(출력할 컬럼, 시작포인트, 시작부터 몇자?)

 


CASE

:경우에 따라 원하는 값을 새 필드에 출력해보기

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

조건에 따라 그에 맞는 새로운 이름을 넣어줄 수가 있다.

CASE WHEN ... ELSE....END

 


퀴즈풀기!

1. 평균 이상 포인트를 가지고 있으면 '잘 하고 있어요' / 낮으면 '열심히 합시다!' 표시하기!

SELECT pu.user_id,
	   pu.point,
	   (
	   case when point > (select avg(point) from point_users pu) then '잘 하고 있어요!'
	   else '열심히 합시다!'
	   end) as msg
from point_users pu

2. 이메일 도메인별 유저의 수 세어보기

나의답:

SELECT SUBSTRING_INDEX(email, '@', -1) as domain, count(*) FROM users u 
group by DOMAIN

선생님 답:

select domain, count(*) as cnt from (
	select SUBSTRING_INDEX(email,'@',-1) as domain from users
) a
group by domain

결과는 같았다!! 같은 결과를 내지만 다양한 풀이방법이 있을 수 있다는 점!!

 

3. '화이팅'이 포함된 오늘의 다짐만 출력해보기

SELECT * FROM checkins c 
WHERE c.comment like '%화이팅%'

때로는 아주 간단하게 like 로 해결할 수 있는데 이걸 까먹고 복잡하게 푸는 경우가 있으니 

심플하게 생각하려 할것!

 

4. 수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수 출력해보기 + 

수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수, 그리고 진도율 출력해보기

 

with donedone as (
	SELECT enrolled_id, count(*)as cnt_total
	FROM enrolleds_detail ed 
	group by enrolled_id
), totaltotal as (
	SELECT enrolled_id, count(*) as cnt_done FROM enrolleds_detail ed 
	WHERE done = '1'
	group by enrolled_id
)
select a.enrolled_id,  b.cnt_done, a.cnt_total, round((b.cnt_done/a.cnt_total),2) as ratio
from
donedone a
inner join 
totaltotal b
on a.enrolled_id = b.enrolled_id

;;어려움

 

더~~ 간결하게도 풀수 있었다. sum을 이용해서.

select enrolled_id,
       sum(done) as cnt_done,
       count(*) as cnt_total
from enrolleds_detail ed
group by enrolled_id

가끔은 멀리서 봤을 대 조금 더 나은 쿼리를 만들 수도 있다.

 

SQL 4주 강의 공부 끝!

 

SQL을 거의 모르는 상태로 들었지만

너무재미있게 강의를 들을 수 있었다.

서브쿼리부터는 조금 어려워져서 혼자 풀지 못한 퀴즈들도 있었지만,

그래서 더욱 새로운걸 배운 보람찬 기분이 드는구만 ㅎㅎ

 

선생님이 너무 쉽게 잘가르쳐주신다 . 감사합니다!!