250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 티스토리챌린지
- join
- 데이터리안
- 파이썬문풀
- 서브쿼리
- SQL
- SQL고득점KIT
- with절
- 데이터리안실전반
- 윈도우함수
- 데벨챌
- 프로그래머스문풀
- leetcode
- 활성사용자수
- 위키독스
- 그로스해킹
- sql문풀
- sql50
- SQL테스트
- 셀프조인
- 약수구하기
- levle1
- 오블완
- mysql
- 문풀
- 파이썬
- leetcode문풀
- 코테준비
- 프로그래머스
- 데이터리안넥스트레벨챌린지
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 응시하지 않은 과목 0으로 표시하기 본문
728x90
출처: [Leetcode - 1280. Students and Examinations
문제(일부): 학생정보(학생 id, 학생이름), 과목이름, 시험정보(학생id, 학생이름) 테이블을 사용,
학생별로 응시한 과목의 시험 수 count하기
JOIN 사용하기
1) Students테이블과 Subjects 테이블을 조인조건 없이 JOIN, 카티션 곱으로 모든 학생에게 동일하게 과목을 모두 매칭
2) LEFT JOIN으로 Examinations에 없는(=응시하지 않은 과목)도 count할 수 있게 함
3) 학생이름과 과목으로 groupby하여 count, 학생별 과목별 시험 수를 cnt
SELECT st.Student_id, st.Student_name, su.subject_name, count(e.subject_name) as attended_exams
FROM Students AS st
JOIN Subjects AS su
LEFT JOIN Examinations AS e
ON st.student_id = e.student_id AND su.subject_name = e.subject_name
GROUP BY st.student_id, su.subject_name
ORDER BY st.student_id, su.subject_name
WITH절 사용하기
1) WITH절에서 학생별 과목별 시험응시 수를 cnt
2) 1번과 동일하게 테이블을 join
3) 주의할 점은 응사하지 않은 과목에 대해 join 시 attended_exams에 null이 발생,
coalesce를 사용하여 0이 될 수 있게 한다.
WITH attended_exams AS(
SELECT student_id, subject_name, count(subject_name) AS attended_exams
FROM Examinations
GROUP BY Student_id,subject_name
)
SELECT st.student_id, st.student_name, su.subject_name, coalesce(e.attended_exams, 0) attended_exams
FROM Students AS st
JOIN Subjects AS su
LEFT JOIN attended_exams AS e
ON st.student_id = e.student_id AND su.subject_name = e.subject_name
ORDER BY st.student_id, su.subject_name
728x90
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 그룹별 비율의 평균 구하기 (1) | 2024.09.26 |
---|---|
[MY SQL] 콘테스트별 참여비율 확인하기 (1) | 2024.09.25 |
[MY SQL] 글자 수 세기(LENGTH VS CHAR_LENGTH) (0) | 2024.08.16 |
[MY SQL] 사용자에게 수신된 메세지 중 'confirmed' 한 메세지 비율 구하기 (0) | 2024.08.06 |
[MY SQL] 오프라인/온라인 데이터 통합하기(UNION) (0) | 2024.07.28 |