Descargo de responsabilidad: Soy un SQL newb y esto es para una clase, pero realmente podría usar un poke en la dirección correcta.Limitaciones de GROUP BY
Tengo estas tres tablas:
student(_sid_, sname, sex, age, year, gpa)
section(_dname_, _cno_, _sectno_, pname)
enroll(_sid_, grade, _dname_, _cno_, _sectno_)
(claves primarias denotados por guiones)
que estoy tratando de escribir una consulta SQL compatible con Oracle que devuelve una tabla con el nombre del estudiante (student.sname
) que tiene el gpa más alto en cada sección (eso incluye section.cno
y section.sectno
), así como todos los demás atributos de section
.
he logrado utilizar una consulta agregada y GROUP BY
para obtener el máximo promedio para cada sección:
SELECT MAX(s.gpa), e.cno, e.sectno
FROM enroll e,
student s
WHERE s.sid = e.sid
GROUP BY e.cno, e.sectno
Por no hablar de los otros atributos section
, ni siquiera puedo encontrar la manera de virar en el nombre del estudiante (student.sname
). Si lo agrego a la cláusula SELECT
, tiene que incluirse en GROUP BY
, lo que arruina el resto de la consulta. Si utilizo esta consulta completa dentro de la cláusula WHERE
o FROM
de una consulta externa, solo puedo acceder a los tres campos de la tabla, lo cual no es de mucha utilidad.
Sé que no puede darme la respuesta exacta, pero cualquier sugerencia sería apreciada.
@OMG Ponies: me gusta la forma en que formateas las consultas. – JoshD
@JoshD: todos lo hacemos ;-) – zerkms
Lo has dicho básicamente. Agregue la tabla de sección a FROM. Agregue restricciones a la sección DÓNDE unirse para inscribirse. Agregue las columnas que desea que sean visibles a SELECT y repítalas en GROUP BY. – kevpie