티스토리 뷰
with 절을 활용한 아래와 같은 쿼리가 있다.
with table1 as (
SELECT enrolled_id, COUNT(*) as total_cnt from enrolleds_detail ed
group by enrolled_id
), table2 as(
SELECT enrolled_id, COUNT(*) as done_cnt from enrolleds_detail ed
WHERE done = 1
group by enrolled_id
)
select a.enrolled_id,
b.done_cnt,
a.total_cnt,
ROUND(b.done_cnt/a.total_cnt*100, 0) as per
from table1 a
INNER join table2 b on a.enrolled_id = b.enrolled_id
order by per;
done_cnt는 들은 강의의 수(done=1), total_cnt는 전체 강의의 수를 말하는데,
done_cnt는 0,1로만 표현된다.
위와 같은 쿼리로도 답을 얻을 수는 있지만, done이 0,1로만 나타난다는 것을 활용하면
SUM을 활용하여 아래와 같이 훨씬 짧은 쿼리로도 답을 얻을 수 있다.
select enrolled_id, sum(done) as cnt_done, count(*) as cnt_total
from enrolleds_detail ed
group by enrolled_id
어짜피 done 의 값을 합치는 것과 갯수의 값이 동일하니 이런식으로 활용하면 쿼리를 훨씬 간단하게 표현할 수 있다!
'db > sql' 카테고리의 다른 글
인텔리제이에서 H2 database 연결 (0) | 2022.12.23 |
---|---|
SQL 기본 문법 정리 (0) | 2022.10.02 |
220930 (0) | 2022.09.30 |
220929 (0) | 2022.09.29 |
220928 (0) | 2022.09.28 |
- Total
- Today
- Yesterday
- 스프링faker
- 프로그래머스
- 토큰
- EC2
- 대규모더미데이터
- 항해
- 자바
- 부하테스트시나리오
- Spring
- jmeter부하테스트
- Redis
- jmeter쿠키
- Lock
- 동적크롤링
- index
- CheckedException
- jmeter토큰
- jmeter로그인
- Python
- pessimisticlock
- jmeter테스트
- jwt
- 인덱스
- Redisson
- jmeter시나리오
- hackerrank
- jmeter세션
- Java
- bankersRounding
- CorrectnessAndTheLoopInvariant
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |