커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
3주차 SQL 과제와 group by 질문
[왕초보] 엑셀보다 쉬운, SQL v3
3주차
북마크
임*영
댓글
3
추천
0
조회수
12
조회수
12
답변 완료


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





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