SQL (DB2) Retorno múltiplas contagens condicionais em uma única consulta
Pergunta
Eu estou tentando selecionar vários resumos condicionais em um único resultado da tabela em um banco de dados baseado DB2.
Exemplo:
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...
Qualquer ajuda é apreciada.
Solução
Este vai contar a ocorrência de cada condição:
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
Outras dicas
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
Onde cláusula é opcional estritamente falando, mas pode ajudar o desempenho. Também "senão nulo" está implícita quando a cláusula else é omitido para que você pode deixar que fora também.
select count(foo)
from t1
where a = 1
union
select count(foo)
from t1
where b = 2
....
Isso vai fazê-lo.
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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow