Buen día mi objetivo es obtener la máxima nota de cada estudiante, sabiendo que pudo ver un curso mas de una vez.
Esta consulta es parte de una migración SQL SERVER 2000 a POSTGRESQL, en el DBMS anterior tarda pero arroja resultados, en POSTGRESQL se tarda tanto que aún no he logrado verlos cuando decido cancelar y buscar opciones por el exceso de tiempo consumido:
SELECT
id,
codcurso,
estudiante,
nota_real AS nota_max
FROM
tbl_cursos_recibidos_notas AS T1
WHERE
(nota_num =
(SELECT MAX(nota_num)
FROM
tbl_cursos_recibidos_notas AS T2
WHERE
T1.estudiante= T2.estudiante
AND
T1.codcurso = T2.codcurso
)
)
¿Alguna recomendación? Soy nuevo con postgresql y quizás pueda tener algún error de sintaxis que no logro ver.
Agradezco de antemano la ayuda, pues carezco de colegas cercanos donde consultar.
Saludos.
Re: Optimizar consulta que busca el maximo MAX
Jue, 19/11/2009 - 13:08 — rafaelmaNecesitamos más información. Nos puedes mandar el resultado de estos comandos desde el cliente psql:
--
Rafael Martinez
Webmaster
datos de tabla y explain (limit 10)
Jue, 19/11/2009 - 15:48 — lcabanin******************************************************************
\d tbl_cursos_recibidos_notas:
******************************************************************
Table "public.tbl_cursos_recibidos_notas"
Column | Type | Modifiers
------------+-----------------------+-----------
id | character varying(10) |
codcurso | character varying(8) | not null
estudiante | bigint | not null
nota_real | character varying(5) |
nota_num | real |
******************************************************************
EXPLAIN consulta_SQL_con_problemas (LIMIT 10 pues no termina nunca de ejecutar si se hace con todos los registros):
******************************************************************
"Limit (cost=0.00..35860326.40 rows=10 width=22) (actual time=696.596..7689.607 rows=10 loops=1)"
" -> Seq Scan on tbl_cursos_recibidos_notas t1 (cost=0.00..14451711538.15 rows=4030 width=22) (actual time=696.592..7689.579 rows=10 loops=1)"
" Filter: (nota_num = (subplan))"
" SubPlan"
" -> Aggregate (cost=17928.27..17928.28 rows=1 width=4) (actual time=699.028..699.029 rows=1 loops=11)"
" -> Seq Scan on tbl_cursos_recibidos_notas t2 (cost=0.00..17928.26 rows=1 width=4) (actual time=0.017..698.995 rows=4 loops=11)"
" Filter: (($0 = trabajador) AND (($1)::text = (codcurso)::text))"
"Total runtime: 7689.704 ms"
******************************************************************
NOTA: esta tabla (public.tbl_cursos_recibidos_notas) tiene 806192 registros.
Re: datos de tabla y explain (limit 10)
Jue, 19/11/2009 - 17:48 — rafaelma¿Has escrito todos los datos que te da \d tbl_cursos_recibidos_notas? ¿No te da ninguna informacion sobre indices, etc al final?
--
Rafael Martinez
Webmaster
agrupe x estudiante en el max
Jue, 05/08/2010 - 15:57 — Anónimoagrupe x estudiante en el max para no comparar de nuevo contra la misma tabla
CREO QUE ASI TE PODRIA FUNCIONAR.
Mié, 11/05/2011 - 22:44 — AnónimoSELECT MAX(id), codcurso, estudiante, MAX(nota_num) AS nota_max FROM
tbl_cursos_recibidos_notas AS T1
GROUP BY codcurso, estudiante
Enviar nuevo comentario