PDA

Ver la Versión Completa : tabla no vacia con group by


jonmendi
28-07-2005, 16:54:13
Hola,
me pasa lo siguiente. Si ejecuto esta query
select codigo from articulos.db where codigo=43

y comprubo si query3.IsEmpty me da el resultado esperado (vacio).

Pero si la query es
SELECTcodigo,sum(1+codigo) FROM articulos.db WHERE codigo=43 GROUP BY CODIGO a pesar de que no haya ningún registro me devuelve que no está vacío. (La query real es algo más complicadilla, peo con esta pasa lo mismo)

¿El sum mete algún registro por defecto? si es así, ¿como comprobar que realmente solo hay ese registro?

Gracias a todos
Jon

delphi.com.ar
28-07-2005, 17:19:51
SELECTcodigo,sum(1+codigo) FROM articulos.db WHERE codigo=43 GROUP BY CODIGO
No tiene sentido esta consulta, agrupar y filtrar de forma excluyente por el mismo campo. ¿Porque no hacer?:
SELECT sum(1+codigo) FROM articulos.db WHERE codigo=43
Ten en cuenta que al hacer sum(1+codigo) y siendo 43 el valor del código sumará 44 por cada registro que encuentre.

jonmendi
28-07-2005, 17:31:21
hola,

efectivamente esta consulta tal como está no tiene sentido. He puesto esa consulta tan sencilla (a la vez que absurda) para que el problema se entendiera bien y no complicar a nadie con una query más larga que no aporta ninguna mayor información al problema. Incluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.

No sé si me he explicado....

Gracias!
Jon

delphi.com.ar
28-07-2005, 17:52:15
He puesto esa consulta tan sencilla (a la vez que absurda) para que el problema se entendiera bien y no complicar a nadie con una query más larga que no aporta ninguna mayor información al problema.
Creí que no se trataba de un ejemplo :rolleyes:

Incluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.
¿Exactamente la consulta del ejemplo te produce el mismo efecto?... ¿Que motor y herramientas de conexión utilizas?

marcoszorrilla
28-07-2005, 17:55:37
Por lo que veo utiliza Paradox y supongo que la conexión la hará con el BDE?

Un Saludo.

jonmendi
28-07-2005, 18:33:57
hola a todos,
efectivamente, tal como dice marcoszorrilla, uso delphi7, paradox, y BDE.

Gracias de nuevo

vtdeleon
28-07-2005, 18:45:27
SaludosIncluso en esta query tan sencilla el IsEmpty da False cuando debería ser True.Al hacer Sum devolvera por lo menos un registro con valor 0 ya que no encontro ningun registro que sumar.

Nota: Esto no lo he probado, pero me resulta logico:P:)

delphi.com.ar
28-07-2005, 19:10:32
Al hacer Sum devolvera por lo menos un registro con valor 0 ya que no encontro ningun registro que sumar.
Eso sería así, en el caso de que no se agrupe por nada, pero cuando se agrupa, tiene que devolver un registro por cada grupo, y si no hay grupos en el resulset, no tiene que retornar ningún registro.

hector.roma
28-07-2005, 19:10:39
Supongamos una tabla por todos conocida y las siguentes sql...
SELECT count(codcli) ,sum(codcli +1), codcli
FROM clientes
WHERE codcli=999

SELECT count(codcli) ,sum(codcli +1), codcli
FROM clientes
WHERE codcli=999
GROUP BY codcli

La primera versión da error ya que la columna codcli, no está incluida en ninguna función de agregado y no hay claúsula GROUP BY. Al añadirla, ya todo corre bien como es normal.

La sentencia COUNT devuelve CERO si no encuentra ningún registro, por eso si la tabla está vacía o si ese registro no existe, devolverá CERO. En cualquier otro caso, el valor que le corresponda.

La sentencia SUM ignora los valores nulos, por lo menos en T-SQL, por lo que si codcli es null, no debería devolver nada.

Ahora bien, a mi también me puede parecer lógico que en otras implementaciones hayan adoptado la postura de devolver cero como la funcion COUNT.

Saludos, y buen viaje a los que os vais de vaciones.
Y cuidado con las francesas/es.

jonmendi
28-07-2005, 21:14:00
Muchas gracias a todos. A mi no me parecía tan lógico, pero supongo que lo será.... Abro otro hilo con otra duda...

Jon