DB2 - ¿en que falla esta query?

 
Vista:

¿en que falla esta query?

Publicado por think (1 intervención) el 23/04/2009 10:05:47
Hola,

estoy intentando hacer una query que me devuelva el numero de registros encontrados, y he probado con esta:

SELECT count(*)
FROM desadm.contenido, desadm.portalcontregla, desadm.regla_contenido
WHERE cc22_tip_regl = 'C' AND cc22_nomregla LIKE 'A%'
AND cc26_cdregla = cc22_cdregla AND cc04_cdconten = cc26_cdconten
GROUP BY cc04_cdconten, cc04_nomconte, cc04_codtcon, cc22_cdregla, cc22_nomregla, cc22_tip_regl

Pero no me sirve, porque a mi lo que me gustaría es obtener en un registro el número de registros encontrados. ¿Tiene algo que ver el Group by?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿en que falla esta query?

Publicado por SPIDER (1 intervención) el 09/05/2009 02:39:17
Hola amigo. A tu query no le falta nada, más bien le sobra. El * en el count está mal, en lugar de utilizar el * cámbialo por un nombre de campo de la tabla (generalmente el id); el group by está de más, pues lo único que deseas es obtener el número de registros. Recuerda que cuando utilizas Group by tu query se hace más lento. Espero te sea útil. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿en que falla esta query?

Publicado por Chauli (43 intervenciones) el 17/05/2009 12:46:38
Hola, la falla de la consulta se encuentra en la seleccion:
Para ser mas claro en SQL existen las funciones que se aplican sobre grupos de datos llamadas funciones de agregacion, por ejemplo: COUNT, MAX, AVG, etc... estas funciones se aplican a la totalidad de la seleccion de filas de una consulta SQL A MENOS que se especifique una clausula group by. Entonces deberás estar realizando la funcion de agregacion para cada uno de los niveles de corte los cuales se especifican en la clausula group by.

pongamos un ejemplo se supone que tenes una tabla de "pagos" con los siguientes campos
nro_cliente
nro_prestamo
nro_pago
importe_pago

Si con esta tabla ejecutamos

SELECT count(*) from pagos

nos devolverá la cuenta de todas las filas de la tabla, es decir solo un numero.

pero suponemos que queremos obtener un reporte con la cuenta de pagos por nro de prestamo, debemos escribir

SELECT nro_cliente, nro_prestamo, count(nro_pago) from pagos
GROUP BY nro_cliente, nro_prestamo

Con la clausula GROUP BY estamos diciendo que las filas se agrupen por numero de cliente y numero de prestamo,por lo que la funcion count se debe aplicar con campos que esten en la clausula select, pero no esten en la clausula group by, por eso no se puede usar el * en el select.

En definitiva para que la consulta funcione deberias arreglarla incluyendo todos los campos de la clausula group by en tu clausula SELECT y en vez de count(*) poner el nombre de algun campo cualquiera que este agrupado bajo los campos agregados al SELECT de la siguiente forma

SELECT cc04_cdconten, cc04_nomconte, cc04_codtcon, cc22_cdregla, cc22_nomregla, cc22_tip_regl, count(algun_otro_campo)
FROM desadm.contenido, desadm.portalcontregla, desadm.regla_contenido
WHERE cc22_tip_regl = 'C' AND cc22_nomregla LIKE 'A%'
AND cc26_cdregla = cc22_cdregla AND cc04_cdconten = cc26_cdconten
GROUP BY cc04_cdconten, cc04_nomconte, cc04_codtcon, cc22_cdregla, cc22_nomregla, cc22_tip_regl

Espero te sirva!
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar