커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
4주차 마지막 퀴즈 (강의안 기준 20, 21) 쿼리문 질문드립니다.
[왕초보] 엑셀보다 쉬운, SQL
4주차
북마크
고*영
댓글
1
추천
0
조회수
6
조회수
6
답변 완료


강의에서 설명해주신 정답쿼리는 20)에서는 서브쿼리를 활용한 방법, 21)은 sum과 count를 활용하는 간단한 방법인데요.

20)

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

21)

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

(강의안의 코드스니펫을 그대로 첨부했습니다.)


20)의 정답쿼리에서 사용한 table1의 서브쿼리는 where절에서 done의 필드값이 1인 데이터만 카운트하기 때문에, 모든 강의를 한 번도 수강하지 않아서 sum(done) = 0인 enrolled_id는 출력 결과에 포함하지 않게 되는 것 같습니다. sum(done) = 0인 enrolled_id가 49개 존재해서, 20)의 정답쿼리는 275개, 21)의 정답쿼리는 324개로 데이터 개수에서 차이가 나구요.

그런데 강의에서는 20)과 21)의 쿼리문이 같은 방법이고, 21)의 쿼리문처럼 간단하게 작성할 수 있다, 하고 설명하고 넘어가시더라구요. 진도율이 0 초과인(강의를 하나라도 다 들은) 유저만을 추출하려면 20)의 쿼리문을 사용하고, 모든 등록 유저의 진도율 현황을 살펴보려면 21)의 쿼리문이 더 적절할 것 같습니다. 두 쿼리문의 쓰임새가 다른 것으로 이해하고 넘어가면 될까요?



스파르타 즉문즉답스파르타 즉문즉답


보고 계신 화면 전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 이해할 수 있어요.







취소
 공유
취소
댓글 0
댓글 알림
나의얼굴