SQL (DB2) Devuelve múltiples recuentos condicionales en una sola consulta

StackOverflow https://stackoverflow.com/questions/1018469

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy intentando seleccionar varios resúmenes condicionales en un único resultado de tabla en una base de datos basada en DB2.

Ejemplo:

SELECT COUNT(FOO) FROM T1 WHERE T1.A=1 AS A_COUNT,
SELECT COUNT(FOO) FROM T1 WHERE T1.B=2 AS B_COUNT
Ext...

Cualquier ayuda es apreciada.

¿Fue útil?

Solución

Esto contará la ocurrencia de cada condición:

select sum(case when t1.a = 1 then 1 else 0 end) as A_COUNT
     , sum(case when t1.b = 2 then 1 else 0 end) as B_COUNT
  from t1
 where t1.a = 1
    or t1.b = 2

Otros consejos

select count(case when t1.a = 1 then foo else null end) as A_COUNT
     , count(case when t1.b = 2 then foo else null end) as B_COUNT
  from t1
 where t1.a = 1
    or t1.b = 2

Donde la cláusula es opcional estrictamente hablando, pero puede ayudar al rendimiento. También " sino nulo " está implícito cuando se omite la cláusula else, por lo que también puede dejarla desactivada de forma segura.

select count(foo)
  from t1
 where a = 1
union
select count(foo)
  from t1
 where b = 2
....

Esto lo hará.

SELECT  A_COUNT as Type ,COUNT(FOO) FROM T1 WHERE T1.A=1, 

Union


SELECT B_COUNT as Type, COUNT(FOO) FROM T1 WHERE T1.B=2 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top