Для каждого студента рассчитайте среднее время, которое проходит между уроками. Отранжируйте результат по возрастанию этого времени. Вывести: id студента, среднее время между уроками. Написать в postgresql
SELECT id, lesson_time, LAG(lesson_time) OVER (PARTITION BY id ORDER BY lesson_time) AS prev_lesson_time
FROM students
Используя этот подзапрос, мы можем вычислить разницу между текущим и предыдущим временем урока:
SELECT id, lesson_time, prev_lesson_time, lesson_time - prev_lesson_time AS time_between_lessons
FROM (
SELECT id, lesson_time, LAG(lesson_time) OVER (PARTITION BY id ORDER BY lesson_time) AS prev_lesson_time
FROM students
) subquery
Теперь у нас есть столбец "time_between_lessons", который содержит время между каждым уроком и предыдущим уроком для каждого студента. Мы можем использовать этот столбец и сгруппировать данные по студенту, вычислив среднее время между уроками:
SELECT id, AVG(time_between_lessons) AS average_time_between_lessons
FROM (
SELECT id, lesson_time, prev_lesson_time, lesson_time - prev_lesson_time AS time_between_lessons
FROM (
SELECT id, lesson_time, LAG(lesson_time) OVER (PARTITION BY id ORDER BY lesson_time) AS prev_lesson_time
FROM students
) subquery
) subquery2
GROUP BY id
ORDER BY average_time_between_lessons
Теперь у нас есть таблица, отсортированная по возрастанию среднего времени между уроками для каждого студента. Каждая строка содержит id студента и среднее время между уроками.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет