Привет! Меня зовут Алексей, и сегодня я хотел бы поделиться своим опытом работы с SQL базой данных ″skyeng_db″ и выполнением заданий 5 и 6.Задание 5 требует, чтобы мы для каждого студента оставили три его последних занятия и рассчитали количество уроков для каждого уровня учителя. Для начала, я использовал следующий запрос для выборки последних трёх занятий для каждого студента⁚
SELECT *
FROM (
SELECT student_id, lesson_id, teaching_level
FROM lessons
WHERE student_id IS NOT NULL
ORDER BY lesson_id DESC
) AS latest_lessons
GROUP BY student_id
Здесь я сначала выбрал все уроки, где student_id не является нулевым, отсортировал их по убыванию lesson_id и затем сгруппировал по student_id, чтобы оставить только последние три занятия для каждого студента.Далее я использовал следующий запрос для подсчета количества уроков для каждого уровня учителя (max_teaching_level)⁚
SELECT teaching_level, COUNT(*) as lesson_count
FROM (
SELECT student_id, lesson_id, teaching_level
FROM lessons
WHERE student_id IS NOT NULL
ORDER BY lesson_id DESC
) AS latest_lessons
GROUP BY teaching_level
Здесь я снова выбрал все последние занятия для каждого студента, а затем сгруппировал уроки по teaching_level и использовал функцию COUNT(*) для подсчета количества уроков для каждого уровня учителя.Теперь перейдем к заданию 6, где нужно рассчитать среднее время между уроками для каждого студента и отсортировать результат по возрастанию этого времени. Вот какой запрос я использовал⁚
SELECT student_id, AVG(time_between_lessons) as average_time
FROM (
SELECT student_id, lesson_id,
UNIX_TIMESTAMP(lesson_start_time) ⸺
UNIX_TIMESTAMP(LAG(lesson_end_time)
OVER (PARTITION BY student_id ORDER BY lesson_start_time))
as time_between_lessons
FROM lessons
WHERE student_id IS NOT NULL
) AS lesson_times
GROUP BY student_id
ORDER BY average_time ASC
Здесь я сначала выбрал все уроки для каждого студента, где student_id не является нулевым, а затем использовал функцию LAG, чтобы рассчитать разницу времени между текущим уроком и предыдущим уроком для каждого студента. Затем я использовал функцию AVG, чтобы получить среднее время между уроками для каждого студента. Наконец, я отсортировал результат по возрастанию этого времени.
Вот так я выполнел задания 5 и 6 для базы данных ″skyeng_db″. Надеюсь٫ мой опыт и использование SQL запросов помогут тебе в выполнении твоей работы. Удачи!