
3주차 Home work 에서
처음에 이너 조인 후 ,
e.enrolled_ id, e.user_id 별로 묶어 준 후에 ( group by 후 )
수강완료한 것을 잘라내려고 where 절을 썼을 때 오류가 나는데, 그 이유는 무엇인가요 ?
꼭 where 절을 토대로 수강 완료한 것을 걸러내고 group by 문을 사용해야 하나요 ?
1 ) 안과 2) 안의 차이점을 잘 모르겠습니다.
1) 안
select * from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
group by e.enrolled_id, e.user_id
where ed.done = 1
2) 안
select * from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
where ed.done = 1
group by e.enrolled_id, e.user_id
Answer
select e.enrolled_id,
e.user_id,
count(*)as max_count
from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
where ed.done = 1
group by e.enrolled_id, e.user_id
order by max_count desc
질문 2 ) 각각 문제 1 )과 문제 2 ) 케이스에서 group by 실행 할 때 어떤 걸 기준으로 묶어주는 건지 궁금합니다.
문제 1 ) checkins 테이블에 courses 테이블 연결해서 통계 치 내보기
' 오늘의 다짐' 정보에 과목 정보를 연결해서 과목 별 ' 오늘의 다짐 ' 갯수를 세어보자 !
1. 테이블 공통 키값으로 연결 후
select * from checkins c1 (오늘의 다짐 정보 )
inner join courses(과목 정보) c2 on c1.course_id
2. 과목 별로 ~ 묶어주기 위해 (유일한 공통점) 으로 묶어줌 ->
과목 별로 묶어줘야 하니까 c1.title 로는 못 묶는지 ? 공통점으로 묶어줘야 하는지 ? 여기서 course_id로 묶은 이유가 궁금해요
select * from checkins c1
inner join courses c2 on c1.course_id = c2.course_id
group by c1.course_id ( c1의 course_id로 묶어주겠다 )
문제 2 ) : 과목 별로 시작하지 않은 유저들 세어보기
여기서도 course_id로 묶은 이유가 궁금해요 !
저는 과목별로 확인해야하니까 title로 묶었는데, 답은 course_id로 되어있어서요!
내 답
select c.title, count(*) from courses c
inner join enrolleds e on c.course_id = e.course_id
where e.is_registered = 0
group by c.title (나는 과목별로 묶어야 하니까 title로 만 묶음 )
강의 답
select c.course_id,c.title, count(*) as cnt from courses c
inner join enrolleds e on c.course_id = e.course_id
where e.is_registered = 0
group by c.course_id
