このテストは、生徒の成績履歴や欠席情報など、より詳細なデータを使用し、ウィンドウ関数、共通テーブル式(CTE)、高度なデータ更新、複雑な条件でのデータ取得といった実践的なSQLスキルを測定することを目的としています。
注: 各問題の解答は、SQL Serverの構文に基づいて記述してください。
以下のテーブル定義とデータ(テストデータで投入されるもの)を考慮して解答してください。
Students
(生徒情報 - 再掲)CREATE TABLE Students ( StudentID INT PRIMARY KEY IDENTITY(1,1), FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, DateOfBirth DATE, EnrollmentDate DATE, Grade INT, -- 学年 Enabled BIT DEFAULT 1, InsertDate DATETIME DEFAULT GETDATE(), UpdateDate DATETIME DEFAULT GETDATE(), DeleteDate DATETIME, UpdateUser NVARCHAR(50) );
Courses
(科目情報 - 再掲)CREATE TABLE Courses ( CourseID INT PRIMARY KEY IDENTITY(1,1), CourseName NVARCHAR(100) NOT NULL, Credits INT, -- 単位数 Department NVARCHAR(50), -- 所属学科 Enabled BIT DEFAULT 1, InsertDate DATETIME DEFAULT GETDATE(), UpdateDate DATETIME DEFAULT GETDATE(), DeleteDate DATETIME, UpdateUser NVARCHAR(50) );
Enrollments
(受講登録情報 - 再掲)CREATE TABLE Enrollments ( EnrollmentID INT PRIMARY KEY IDENTITY(1,1), StudentID INT NOT NULL, CourseID INT NOT NULL, EnrollmentDate DATE, GradeScore INT, -- 点数 (0-100) Semester NVARCHAR(20), -- 'Spring', 'Fall' Enabled BIT DEFAULT 1, InsertDate DATETIME DEFAULT GETDATE(), UpdateDate DATETIME DEFAULT GETDATE(), DeleteDate DATETIME, UpdateUser NVARCHAR(50), FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) );
Attendance
(出席情報)CREATE TABLE Attendance ( AttendanceID INT PRIMARY KEY IDENTITY(1,1), StudentID INT NOT NULL, CourseID INT NOT NULL, AttendanceDate DATE NOT NULL, Status NVARCHAR(20), -- 'Present', 'Absent', 'Late' Reason NVARCHAR(255), -- 欠席理由など Enabled BIT DEFAULT 1, InsertDate DATETIME DEFAULT GETDATE(), UpdateDate DATETIME DEFAULT GETDATE(), DeleteDate DATETIME, UpdateUser NVARCHAR(50), FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) );
CourseName
)ごとに、その科目の前の学期(`Semester`と`EnrollmentDate`で順序付け)に取得したGradeScore
を隣接する行として表示するSQL文を記述してください。最初の学期の科目は前のスコアをNULLとします。有効な受講記録のみを対象とします。
解答欄:
Grade
を1段階下げるSQL文を記述してください。`UpdateUser`も適切に設定してください。(学年が1の場合はそれ以上下げない)
解答欄:
CourseName
)を取得するSQL文を記述してください。解答欄:
StudentID
, FirstName
, LastName
)について、科目別(`国語I`, `数学A`, `英語コミュニケーション`, `物理基礎`)の最終成績(GradeScore
)を列として表示するSQL文を記述してください。該当科目を未受講の場合はNULLと表示し、有効な受講記録のみを対象とします。`PIVOT`句または`CASE`式と集計関数を組み合わせて使用してください。
解答欄:
Grade
)ごとに成績(GradeScore
)の高い順に3つのグループ(1:上位、2:中位、3:下位)に分割し、各生徒のFirstName
、LastName
、Grade
、GradeScore
、およびそのグループ(タイル番号)を表示するSQL文を記述してください。特定の科目に限定せず、受講した全ての科目の平均点でグループ分けしてください。
解答欄: