[LeetCode] Students and Examinations

아르당·2026년 4월 15일

LeetCode

목록 보기
263/303
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

Table: Students

Column NameType
student_idint
student_namevarchar

student_id는 이 테이블의 기본 키이다.
테이블의 각 행은 학교의 학생 이름과 ID를 포함한다.

Table: Subjects

Column NameType
subject_namevarchar

subject_name은 이 테이블의 기본 키이다.
테이블의 각 행은 학교의 과목의 이름을 포함한다.

Table: Examinations

Column NameType
student_idint
subject_namevarchar

이 테이블에 기본 키는 없다. 중복을 포함할 수도 있다.
Students 테이블에서 각 학생은 Subjects 테이블에서 모든 과목을 수강한다.
이 테이블의 각 행은 student_id를 가진 학생이 subject_name의 시험에 응시한 것을 나타낸다.

각 학생이 각각의 시험에 응시한 횟수를 구하는 방법을 작성해라.

Example

Input:
Students table:

student_idstudent_name
1Alice
2Bob
13John
6Alex

Subjects table:

subject_name
Math
Physics
Programming

Examinations table:

student_idsubject_name
1Math
1Physics
1Programming
2Programming
1Physics
1Math
13Math
13Programming
13Physics
2Math
1Math

Output:

student_idstudent_namesubject_nameattended_exams
1AliceMath3
1AlicePhysics2
1AliceProgramming1
2BobMath1
2BobPhysics0
2BobProgramming1
6AlexMath0
6AlexPhysics0
6AlexProgramming0
13JohnMath1
13JohnPhysics1
13JohnProgramming1

Explanation:
결과 테이블은 모든 학생과 모든 과목을 포함해야한다.
Alice는 Math에 3번, Physics에 2번, Programming에 1번 응시했다.
Bob는 Math에 1번, Programming에 1번 응시했고, Physics는 응시하지 않았다.
Alex는 어떤 시험도 응시하지 않았다.
John은 Math에 1번, Physics에 1번, Programming에 1번 응시했다.

Solution

-- Write your PostgreSQL query statement below
select
    A.student_id,
    A.student_name,
    B.subject_name,
    count(C.student_id) as attended_exams
from Students A
cross join Subjects B
left outer join Examinations C on A.student_id = C.student_id and B.subject_name = C.subject_name
group by A.student_id, A.student_name, B.subject_name
order by A.student_id, A.student_name, B.subject_name
profile
내 마음대로 코드 작성하는 세상

0개의 댓글