SQL (DB2) Devuelve múltiples recuentos condicionales en una sola consulta
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.
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