PDA

Ver la Versión Completa : Problema con contar


kao
07-07-2003, 04:23:51
hola, necesito hacer una consulta de tres tablas diferentes: cursos especialidades y planes de eestudio (cursos, especialidades, planest respectivamente), entonces use un query asi:

Select distinct(A.descripcion), B.nom_espec, count(C.cve_mat) from planest A, especialidad B, cursos C
where A.cveespec = B.cveespec


necesito la descripion, nomre de la especialidad y el numero de materias por especialidad
Pero me marca errores :confused:
Puede alguien ayudarme?

andres1569
07-07-2003, 10:08:20
Hola:

Al usar el operador COUNT, debes agrupar la consulta por los campos que aparecen en el SELECT y sobre los que aplicas ningún operador del tipo SUM; AVG, ... Otra cosa, el distinct sobra para este tipo de consultas, y tampoco veo que relaciones la tercera tabla en nigún sitio:

Select A.descripcion, B.nom_espec, count(C.cve_mat)
from planest A, especialidad B, cursos C
where A.cveespec = B.cveespec and B.clave = C.clave
group by A.descripcion, B.nom_espec

Revisa si la tabla de planes de estudio (la C) contiene siempre registros para cualquier especialidad, si no es obligado que sea así, sería conveniente que en vez de estar en la cláusula where estuviera en forma de un left join, para que no invalidara la consulta (si usas where y no existe, simplemente no te devuelve ninguna fila, si usas left join y no existe, te devuelve 0).

Cabanyaler
07-07-2003, 10:13:19
Creo q tu error está en la composición de la propia SQL, ya que q utilizas y no sé si admite la sintaxis del count donde lo has situado tu versión de SQL.

Por otro lado, enlazas las tablas A y B, pero con respecto a la C, no la tienes enlazada en absoluto con el resto de las demás.

Revisa el diseño de la SQL.

Posteriromente revisa las tablas para comprobrar que tienes las Claves Ajenas necesarias e imprescidibles para la consulta que quieres realizar y posteriormente redactas correctamente la propia SQL.

Nos darías más información si además nos dieses los errores que te dá el sistema al ejecutar la SQL.

Un saludo y suerte. :o

jachguate
07-07-2003, 10:47:14
Que base de datos utilizas... la sintaxis no me parece conocida.

En SQL estándar, debiera ser algo como:




Select A.descripcion, B.nom_espec, count(*) cantidad_cursos
from planest A, especialidad B, cursos C
where A.cveespec = B.cveespec
and c.loquesea = a o b.loquesea /*para no discutirte todo el producto cartesiano... */
group by a.descripcion, b.nom_espec


Creo que te vendria bien comprarte un buen libro de SQL.

Hasta luego.

;)

pd. El libro es para leerlo, por supuesto :D