인프런 커뮤니티 질문&답변
리트코드 1280. Students and Examinations
해결된 질문
작성
·
28
·
수정됨
0
SELECT st.student_id
, st.student_name
, su.subject_name
, COUNT(e.student_id) AS 'attended_exams'
FROM Students AS st
CROSS 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 su.subject_name
ORDER BY st.student_id, su.subject_name[리트코드 1280. Students and Examinations]
정답과 다르게 작성한 부분은 GROUP BY 입니다.
저는 GROUP BY에 sb.subject_name 만 작성했습니다.. 이 때 Output이 Alice 결과만 나오는 것도 이해가 안가고
[CROSS JOIN+연습문제풀이] 해설영상을 보면 6분12초 "GROUP BY의 기준컬럼으로 사용하면 되겠구요" 라는 부분이 이해가 안가요..ㅠㅠ
제가 GROUP BY의 개념이해가 부족한 것 같은데... 어느 부분을 제가 못잡고 있는 걸까요? 추가로 도움될만한 영상이나 글이 있을까요?
+추가)
같은 맥락으로..
해커랭크 [ Average Population of Each Continent ]
SELECT co.CONTINENT
, FLOOR(AVG(ci.population))
FROM CITY AS ci
INNER JOIN COUNTRY AS co ON ci.COUNTRYCODE = co.CODE
GROUP BY co.CONTINENT, ci.population해당문제는 GROUP BY에 컬럼 둘 다 넣었는데 얜 또 컬럼 하나만 넣어야 되더라구요 ㅠ
답변 3
0
GROUP BY 절에는 그룹을 나누는 기준이 되는 컬럼이 모두 들어가야합니다.
Students and Examinations 문제에서는 학생별로 & 과목별로 시험을 몇 번씩 봤는지를 구하라고 요구합니다. 나와야 하는 아웃풋을 문장으로 표현하면,
- A 학생이 수학 시험을 3번 봄
- A 학생이 영어 시험을 2번 봄
- B 학생이 영어 시험을 3번 봄
이런 식으로 쓸 수 있습니다.
지금 벨벨님은 GROUP BY subject_name 만 쓰셨으니 과목별로만 그룹이 나눠지고, 그러면 위 예시에서는 A 학생이 본 영어 시험과 B 학생이 본 영어 시험이 구분이 되지 않겠죠. 둘 다 과목이 '영어'로 같으니까요.
학생별로 & 과목별로 나누려면 GROUP BY student_id, student_name, subject_name 이렇게 student와 subject가 다 들어가야 합니다. student_name은 동명이인이 있을 수도 있으니 student_id까지 포함해서 확실하게 나눠 주세요.
그리고 SELECT 절에 그룹별 값, 이 문제에서는 '시험을 본 횟수' 를 구하는 함수가 같이 들어가야하는데 지금 쿼리로는 다른 값을 세고 있습니다. 이거 참고해서 수정해 보시길 바랍니다.
Average Population of Each Continent 는 대륙별 인구 평균값을 구하라는 문제입니다. 대륙별이니까 GROUP BY continent 이렇게 대륙 하나만 들어가면 됩니다.
0
0
안녕하세요, 인프런 AI 인턴입니다.
[SQL 실전반 6기] 벨벨님, 질문 주셔서 감사합니다.
GROUP BY의 정확한 사용법과 왜 특정 컬럼을 기준으로 그룹핑할 때 원하는 결과가 나오는지가 혼란스러우신 것 같습니다. SQL의 GROUP BY 구문은 데이터를 특정 열 기준으로 그룹화한 후, 각 그룹에 대해 집계 함수(SUM, COUNT 등)를 적용할 때 사용됩니다. 이 구문을 잘못 사용하거나 이해하지 못하면 예상치 못한 결과가 나올 수 있습니다. 이러한 혼란을 풀기 위해 도움이 될 만한 몇 가지 자료를 추천드립니다:
group by와 집계함수 질문: 이 게시물에서는 GROUP BY의 기본 동작 원리와 SELECT 문에서 집계하지 않은 값의 출력에 대한 설명이 담겨 있습니다.
having은 group by를 쓸때만 쓰는건가요?: HAVING 절의 사용법 또한 GROUP BY와 맞물려 동작하며, WHERE 절과의 차이점을 이해하는 데 도움이 됩니다.
top earners: GROUP BY의 실행 순서와 Alias 사용에 대한 문답이 있으며, 쿼리 실행의 맥락을 이해하는 데 유용합니다.
추가로, GROUP BY를 더 잘 이해하기 위해선 다양한 예제를 풀어보는 것도 큰 도움이 됩니다. 특히, 잘못된 결과가 나왔을 때, 쿼리가 어떻게 작동하는지를 역으로 분석해보는 것도 좋은 학습 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





