Skip to content

Instantly share code, notes, and snippets.

@SergioRodrigues1
Created March 29, 2025 15:50
Show Gist options
  • Save SergioRodrigues1/53b906a953a843529fe0985fea0d0ddc to your computer and use it in GitHub Desktop.
Save SergioRodrigues1/53b906a953a843529fe0985fea0d0ddc to your computer and use it in GitHub Desktop.
TESTE SQL - QUESTÃO 1 - LIA
-- **Parte A: Quantidade de alunos matriculados e valor total das matrículas**
SELECT
s.name AS school_name,
st.enrolled_at::date AS enrollment_date,
COUNT(st.id) AS total_students,
SUM(c.price) AS total_price
FROM
students st
JOIN
courses c ON st.course_id = c.id
JOIN
schools s ON c.school_id = s.id
WHERE
c.name LIKE 'data%' -- Filtra cursos que começam com "data"
GROUP BY
s.name, st.enrolled_at::date
ORDER BY
enrollment_date DESC;
-- **Parte B: Soma acumulada, média móvel de 7 e 30 dias da quantidade de alunos**
WITH daily_enrollment AS (
SELECT
s.name AS school_name,
st.enrolled_at::date AS enrollment_date,
COUNT(st.id) AS total_students
FROM
students st
JOIN
courses c ON st.course_id = c.id
JOIN
schools s ON c.school_id = s.id
WHERE
c.name LIKE 'data%' -- Filtra cursos que começam com "data"
GROUP BY
s.name, st.enrolled_at::date
)
SELECT
school_name,
enrollment_date,
total_students,
SUM(total_students) OVER (PARTITION BY school_name ORDER BY enrollment_date) AS cumulative_students,
AVG(total_students) OVER (PARTITION BY school_name ORDER BY enrollment_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg_7_days,
AVG(total_students) OVER (PARTITION BY school_name ORDER BY enrollment_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS moving_avg_30_days
FROM
daily_enrollment
ORDER BY
enrollment_date DESC;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment