Привет! Меня зовут Иван, я занимаюсь изучением SQL и хочу поделиться с тобой своим опытом по решению заданий 5 и 6.SQL Задание 5⁚
Для начала, нам нужно вывести три последних занятия для каждого студента. Для этого мы можем использовать оконную функцию ROW_NUMBER и PARTITION BY, чтобы разделить данные по студентам и упорядочить их по дате занятия. Затем мы выбираем только строки, где номер строки меньше или равен 3.sql
SELECT *
FROM (
SELECT *,
ROW_NUMBER OVER (PARTITION BY student_id ORDER BY lesson_date DESC) AS rn
FROM lessons
) AS subquery
WHERE rn < 3
Теперь, чтобы подсчитать количество уроков для каждого уровня учителя, мы можем использовать подзапрос с группировкой по уровню учителя, а затем подсчитать количество записей.sql
SELECT max_teaching_level, COUNT(*) AS num_lessons
FROM (
SELECT *,
ROW_NUMBER OVER (PARTITION BY student_id ORDER BY lesson_date DESC) AS rn
FROM lessons
) AS subquery
WHERE rn < 3
GROUP BY max_teaching_level
SQL Задание 6⁚
Для этого задания нам нужно рассчитать среднее время между уроками для каждого студента; Мы можем использовать оконную функцию LAG для вычисления разницы между текущим и предыдущим уроком во времени. Затем мы усредняем эти разницы по студентам и сортируем результаты по возрастанию времени.sql
SELECT student_id, AVG(time_diff) AS avg_time_between_lessons
FROM (
SELECT student_id,
lesson_date ౼ LAG(lesson_date) OVER (PARTITION BY student_id ORDER BY lesson_date) as time_diff
FROM lessons
) AS subquery
GROUP BY student_id
ORDER BY avg_time_between_lessons ASC
Таким образом, мы можем решить задания 5 и 6٫ используя оконные функции и группировку. Я сам применил эти подходы в своих проектах и они отлично работают! Удачи в изучении SQL!