2011-05-26 36 views
10

Tengo dos tablas y quiero el número total de filas en cada una. La consulta real es más compleja, ya que habrá ... cláusulas para cada recuentosql sum of counts

¿Cómo hago lo siguiente en t-sql (ninguno de los cuales funciona)?

select count(*) from table1 + count(*) from table2 

o

select sum(count(*) from table1,count(*) from table2) 

Respuesta

7
select (select count(PrimaryKeyID) from FirstTable) 
     + (select COUNT(PrimaryKeyID) from TableSecond) 

Así que creo que debemos evitar el uso de estrellas en consulta a continuación. Ya que puede causar la degradación del rendimiento de la consulta

select (select count(*) from FirstTable) 
     + (select COUNT(*) from TableSecond) 
+1

Hice una prueba rápida en mi base de datos con 3 formas de conteo de registros por columna de clave principal: 'SELECT COUNT (*) FROM table; SELECT COUNT (pk_col) FROM tabla; SELECCIONAR COUNT (1) FROM tabla; '. Los 3 devuelven los mismos resultados y tienen el mismo plan de consulta. He probado dos tablas sobre 15 millones de registros uno y más de 50 millones de segundo uno). Entonces, probablemente, cualquier forma de columna 'COUNT' by PK no hace la diferencia en MS SQL. Sin embargo, hace la diferencia para el recuento de registros por columnas que aceptan nulos, lo que también probé, en ese caso 'COUNT (*)' afecta el rendimiento (en mi prueba). –

+0

:) De hecho, quería decir que pocas columnas que no están indexadas y usar el conteo selecto (*) deberían ralentizar el tiempo de acceso. No sé por qué no hace la diferencia a tu lado. Pero fue mi experiencia pasada elegir esa columna que está indexada. – Pankaj

+0

@Grzrgorz - para columnas que aceptan nulos, 'COUNT ()' da una * respuesta * diferente - no es una cuestión de rendimiento, es una cuestión de cuál respuesta es la correcta en ese caso. –

10
select SUM(cnt) from 
(
    select COUNT(*) as cnt from table1 where /* where conditions */ 
    union all 
    select COUNT(*) from table2 where /* where conditions */ 
) t 

parecería hacer el truco, mantener las consultas de las diferentes mesas separadas, y se extienden a más tablas fácilmente.

+0

Esta consulta no es válida para la sintaxis de T-SQL ya que la cláusula FROM de las declaraciones SELECT externas no puede operar en las subselecciones COUNT –

+1

@ Mr.Mountain - le faltaba un alias después del ')' final, pero aparte de eso, es perfectamente válido . –