티스토리 뷰

db/sql

221002

kirinman 2022. 10. 2. 20:11

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
댓글