Загрузка данных


SELECT 
    cls.class_num,
    cls.class_letter,
    sub.subject_name,
    AVG(CAST(g.grade_value AS FLOAT)) AS avg_subject_grade
FROM Classes cls
JOIN Students st ON cls.class_id = st.class_id
JOIN Grades g ON st.student_id = g.student_id
JOIN Subjects sub ON g.subject_id = sub.subject_id
WHERE g.quarter = 3 -- Номер нужной четверти
GROUP BY cls.class_num, cls.class_letter, sub.subject_name
ORDER BY cls.class_num ASC, cls.class_letter ASC, sub.subject_name ASC;

-- Средний балл по каждому классу
SELECT 
    cls.class_num,
    cls.class_letter,
    AVG(CAST(g.grade_value AS FLOAT)) AS class_avg_grade
FROM Classes cls
JOIN Students st ON cls.class_id = st.class_id
JOIN Grades g ON st.student_id = g.student_id
GROUP BY cls.class_num, cls.class_letter
ORDER BY cls.class_num ASC, cls.class_letter ASC;

-- Общий средний балл по всей школе
SELECT 
    AVG(CAST(grade_value AS FLOAT)) AS school_overall_avg
FROM Grades;

SELECT 
    SUM(CASE WHEN min_grade = 5 AND max_grade = 5 THEN 1 ELSE 0 END) AS only_fives,
    SUM(CASE WHEN min_grade >= 4 THEN 1 ELSE 0 END) AS fours_and_fives_only,
    SUM(CASE WHEN has_three = 1 THEN 1 ELSE 0 END) AS has_at_least_one_three,
    SUM(CASE WHEN has_two = 1 THEN 1 ELSE 0 END) AS has_at_least_one_two
FROM (
    SELECT 
        st.student_id,
        MIN(g.grade_value) AS min_grade,
        MAX(g.grade_value) AS max_grade,
        MAX(CASE WHEN g.grade_value = 3 THEN 1 ELSE 0 END) AS has_three,
        MAX(CASE WHEN g.grade_value = 2 THEN 1 ELSE 0 END) AS has_two
    FROM Students st
    JOIN Grades g ON st.student_id = g.student_id
    GROUP BY st.student_id
) AS student_stats;

-- 1. Классный руководитель для каждого класса
SELECT 
    cls.class_num,
    cls.class_letter,
    t.full_name AS class_teacher
FROM Classes cls
JOIN Teachers t ON cls.class_teacher_id = t.teacher_id
ORDER BY cls.class_num ASC, cls.class_letter ASC;

-- 2. Количество учителей по каждому предмету
SELECT 
    sub.subject_name,
    COUNT(ts.teacher_id) AS teacher_count
FROM Subjects sub
LEFT JOIN Teacher_Subjects ts ON sub.subject_id = ts.subject_id
GROUP BY sub.subject_name;

-- 3. Общее количество кабинетов в школе
SELECT 
    COUNT(*) AS total_cabinets 
FROM Cabinets;