Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con count(*) de registros de tablas

Estas en el tema de Problema con count(*) de registros de tablas en el foro de SQL Server en Foros del Web. Tengo la siguiente duda: Supongamos que tenemos una tabla animales y otras dos perros y gatos, en el primer query el resultado es "30" en ...
  #1 (permalink)  
Antiguo 27/06/2011, 12:36
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 13 años, 11 meses
Puntos: 0
Problema con count(*) de registros de tablas

Tengo la siguiente duda:

Supongamos que tenemos una tabla animales y otras dos perros y gatos,
en el primer query el resultado es "30"
en el segundo query el resultado es "50"

Como hacerle para que me despliegue solamente el resultado de la suma de los dos querys que seria "80"

SELECT COUNT(*) FROM ANIMALES INNER JOIN PERROS ON
ANIMALES.ID_ANIMAL=PERROS.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'


SELECT COUNT(*) FROM ANIMALES INNER JOIN GATOS ON
ANIMALES.ID_ANIMAL=GATOS.ID_GATO WHERE UBICACION LIKE 'EDO.MEX'
  #2 (permalink)  
Antiguo 27/06/2011, 12:41
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con count(*) de registros de tablas

Algo así:

Código SQL:
Ver original
  1. SELECT SUM(cuenta)
  2. FROM
  3. (SELECT COUNT(*) AS cuenta FROM ANIMALES INNER JOIN PERROS ON
  4. ANIMALES.ID_ANIMAL=PERROS.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'
  5. UNION
  6. SELECT COUNT(*)  AS cuenta FROM ANIMALES INNER JOIN GATOS ON
  7. ANIMALES.ID_ANIMAL=GATOS.ID_GATO WHERE UBICACION LIKE 'EDO.MEX')
  #3 (permalink)  
Antiguo 27/06/2011, 13:49
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Problema con count(*) de registros de tablas

Muy buena idea, pero aun sigo teniendo problemas me marca error en los parentesis
no se por que en la ultima linea despues del where y vi otros ejemplos que tienen la misma sintaxis
  #4 (permalink)  
Antiguo 27/06/2011, 13:55
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con count(*) de registros de tablas

Prueba a renombrar la subconsulta a ver si así te funciona.

Código SQL:
Ver original
  1. SELECT SUM(cuenta)
  2. FROM
  3. (SELECT COUNT(*) AS cuenta FROM ANIMALES INNER JOIN PERROS ON
  4. ANIMALES.ID_ANIMAL=PERROS.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'
  5. UNION
  6. SELECT COUNT(*) *AS cuenta FROM ANIMALES INNER JOIN GATOS ON
  7. ANIMALES.ID_ANIMAL=GATOS.ID_GATO WHERE UBICACION LIKE 'EDO.MEX')
  8. AS subconsulta
  #5 (permalink)  
Antiguo 27/06/2011, 13:58
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Problema con count(*) de registros de tablas

Hola estre07:

Prueba con esto

Código SQL:
Ver original
  1. DECLARE @ANIMALES TABLE (id_animal INT, descripcion VARCHAR(20), ubicacion VARCHAR(10))
  2. INSERT INTO @ANIMALES VALUES (1, 'Animal uno', 'EDO.MEX')
  3. INSERT INTO @ANIMALES VALUES (2, 'Animal dos', 'EDO.MEX')
  4. INSERT INTO @ANIMALES VALUES (3, 'Animal tres', 'EDO.MEX')
  5. INSERT INTO @ANIMALES VALUES (4, 'Animal cuatro', 'EDO.MEX')
  6. INSERT INTO @ANIMALES VALUES (5, 'Animal cinco', 'EDO.MEX')
  7. INSERT INTO @ANIMALES VALUES (6, 'Animal seis', 'EDO.MEX')
  8.  
  9. DECLARE @PERROS TABLE (id_perro INT, descripcion VARCHAR(20))
  10. INSERT INTO @PERROS VALUES (1, 'Perro uno')
  11. INSERT INTO @PERROS VALUES (2, 'Perro dos')
  12. INSERT INTO @PERROS VALUES (5, 'Perro cinco')
  13.  
  14. DECLARE @GATOS TABLE (id_gato INT, descripcion VARCHAR(20))
  15. INSERT INTO @GATOS VALUES (3, 'Gato tres')
  16. INSERT INTO @GATOS VALUES (4, 'Gato cuatro')
  17.  
  18.  
  19. SELECT COUNT(*) FROM @ANIMALES A
  20. INNER JOIN @PERROS P ON
  21. A.ID_ANIMAL=P.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'
  22.  
  23.  
  24. SELECT COUNT(*) FROM @ANIMALES A
  25. INNER JOIN  @GATOS G ON
  26. A.ID_ANIMAL=G.ID_GATO WHERE UBICACION LIKE 'EDO.MEX'
  27.  
  28. SELECT COUNT(*) FROM @ANIMALES A
  29. LEFT JOIN @PERROS P ON
  30. A.ID_ANIMAL=P.ID_PERRO
  31. LEFT JOIN  @GATOS G ON
  32. A.ID_ANIMAL=G.ID_GATO
  33. WHERE UBICACION LIKE 'EDO.MEX' AND
  34. (EXISTS (SELECT ID_PERRO FROM @PERROS WHERE a.id_animal = id_perro) OR
  35. EXISTS (SELECT ID_GATO FROM @GATOS WHERE a.id_animal = id_gato))
  36.  
  37. SELECT SUM(cuenta)
  38. FROM
  39. (SELECT COUNT(*) AS cuenta FROM @ANIMALES A INNER JOIN @PERROS P ON
  40. A.ID_ANIMAL=P.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'
  41. UNION
  42. SELECT COUNT(*) AS cuenta FROM @ANIMALES A INNER JOIN @GATOS G ON
  43. A.ID_ANIMAL=G.ID_GATO WHERE UBICACION LIKE 'EDO.MEX') T

La parte del EXISTS en el WHERE es sólo por si tuvieras algún id_animal que no exista ni en la tabla de PERROS ni en la tabla de GATOS (en el ejemplo sería el id_animal = 6), pero podrías omitirla si tienes la seguridad de que el id_animal exista en al menos una de las dos tablas.

En la consulta que te propone el compañero estre07 lo único que falta es asignarle un alias a la consulta que hace la UNION.

Es cuestión que pruebes ambas soluciones para que veas cual es más eficiente.

Saludos
Leo.
  #6 (permalink)  
Antiguo 27/06/2011, 15:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Problema con count(*) de registros de tablas

al ejecutar el siguiente query solo me arroja el resultado del primer query que es el de perros

SELECT COUNT(*) FROM @ANIMALES A
LEFT JOIN @PERROS P ON
A.ID_ANIMAL=P.ID_PERRO
LEFT JOIN @GATOS G ON
A.ID_ANIMAL=G.ID_GATO
WHERE UBICACION LIKE 'EDO.MEX'

y al ejecutar el otro query me arroja bien el resultado solo hay problema cuando el resultado de ambos querys con iguales me arroja el mismo valor
por ejemplo gatos 4 perros 4 me da resultado solo 4 no los suma si son diferentes 4 y 6 si realiza bien la suma que es 10 por por ejemplo

SELECT SUM(cuenta)
FROM
(SELECT COUNT(*) AS cuenta FROM @ANIMALES A INNER JOIN @PERROS P ON
A.ID_ANIMAL=P.ID_PERRO WHERE UBICACION LIKE 'EDO.MEX'
UNION
SELECT COUNT(*) AS cuenta FROM @ANIMALES A INNER JOIN @GATOS G ON
A.ID_ANIMAL=G.ID_GATO WHERE UBICACION LIKE 'EDO.MEX') T


gracias....
  #7 (permalink)  
Antiguo 27/06/2011, 15:23
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con count(*) de registros de tablas

Pon UNION ALL para que te incluya las filas duplicadas, por eso te falla si son iguales.

Etiquetas: count, registros, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:19.