Case when 문
with table1 as (
SELECT user_id, `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
group by a.lv
Quiz
1. point_users 테이블에서 평균이상 포인트를 가지고 있으면 잘하고 있어요. 낮으면 열심히 합시다 표시
SELECT point_user_id, `point`, (
case when `point` > (select AVG(`point`) from point_users) then '잘 하고 있어요!'
else '열심히 합시다!' end
) as msg
from point_users pu
2. users 테이블에서 이메일 도메인별 유저의 수 세어보기
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 u
) a
group by domain
3. enrolled_detail 테이블의 enrolled_id별 전체 강의 수와 들은 강의수(done) 출력하기
with table1 as (
SELECT enrolled_id, COUNT(*) as done_cnt from enrolleds_detail
WHERE done = 1
group by enrolled_id
), table2 as (
SELECT enrolled_id, COUNT(*) as total_cnt
from enrolleds_detail
group by enrolled_id
)
select a.enrolled_id,
a.done_cnt,
b.total_cnt,
ROUND(a.done_cnt/b.total_cnt, 2) as ratio
from table1 a
inner join table2 b on a.enrolled_id = b.enrolled_id
'SQL' 카테고리의 다른 글
서브쿼리(Subquery)와 with절 (0) | 2023.02.24 |
---|---|
Join과 Union (0) | 2023.02.23 |
Group by, Order by, Alias 3일차 (0) | 2023.02.22 |
조건문 Where와 추가문법 2일차 (0) | 2023.02.21 |
조건문 Where 기초 (1일차) (0) | 2023.02.20 |