Для каждого студента рассчитайте среднее время, которое проходит между уроками. Отранжируйте результат по возрастанию этого времени. Вывести: id студента, среднее время между уроками. Написать в postgresql
sql
SELECT student_id, AVG(time_between_lessons) AS average_time_between_lessons
FROM (
SELECT student_id,
EXTRACT(EPOCH FROM (next_lesson - current_lesson)) / 60 AS time_between_lessons
FROM (
SELECT student_id,
lag(lesson_time) OVER (PARTITION BY student_id ORDER BY lesson_time) AS current_lesson,
lesson_time AS next_lesson
FROM lessons
) AS subquery
) AS subquery2
GROUP BY student_id
ORDER BY average_time_between_lessons;
The query first uses a subquery to calculate the time between consecutive lessons for each student. It uses the `lag` window function to retrieve the previous lesson time for each lesson. Then, it calculates the time difference between the current lesson and the next lesson using `EXTRACT` and `EPOCH` functions, and converts it to minutes.
In the outer query, we calculate the average time between lessons for each student by taking the average of the time_between_lessons values. We group the results by student_id and sort them in ascending order by the average_time_between_lessons.
You will need to replace `lessons` with the actual name of your table containing the lesson data. The table should have the columns `student_id` and `lesson_time`, where `student_id` is the student's identifier and `lesson_time` is the timestamp of the lesson.
The result of the query will be a list of student_ids and their corresponding average times between lessons, sorted in ascending order.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет