/ 01.sql
01.sql
 1  SELECT    pcs.nombre_profesor,
 2            pcs.nombre_curso,
 3            pcs.seccion,
 4            pcs.id_curso,
 5            pcs.codigo,
 6            tsc.semanas,
 7            ccc.cantidad_clases,
 8            ROUND((ccc.cantidad_clases::NUMERIC / tsc.semanas::NUMERIC), 1) AS clases_en_semana
 9  FROM      (
10            SELECT    DISTINCT ON (p.nombre, c.nombre) p.nombre AS nombre_profesor,
11                      c.nombre AS nombre_curso,
12                      c.seccion,
13                      c.id AS id_curso,
14                      c.codigo
15            FROM      relacion r
16            LEFT JOIN profesor p ON r.profesor = p.id
17            LEFT JOIN curso c ON r.curso = c.id
18            WHERE     r.semestre = 26
19            ) pcs
20  LEFT JOIN (
21            SELECT    sp.curso,
22                      c.codigo,
23                      semestre,
24                      COUNT(semestre) AS semanas
25            FROM      semana_planificada sp
26            LEFT JOIN curso c ON sp.curso = c.id
27            WHERE     semestre = 26
28            GROUP BY  sp.curso,
29                      c.codigo,
30                      semestre
31            ) tsc ON pcs.id_curso = tsc.curso
32  LEFT JOIN (
33            SELECT    sp.curso AS curso,
34                      COUNT(*) AS cantidad_clases
35            FROM      actividad_clase ac
36            JOIN      clase_planificada cp ON cp.id = ac.id_clase
37            JOIN      semana_planificada sp ON cp.id_semana = sp.id
38            WHERE     sp.semestre = 26
39            GROUP BY  sp.curso
40            ) ccc ON pcs.id_curso = ccc.curso;