SQL (DB2) Возвращает несколько условных значений в одном запросе
Вопрос
Я пытаюсь выделить несколько условных сводок в одну таблицу результатов в базе данных на базе DB2.
Пример:
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...
Любая помощь приветствуется.
Решение
Это позволит подсчитать возникновение каждого условия:
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
Другие советы
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
Предложение Where, строго говоря, необязательно, но может помочь производительности.Также "else null" является неявным, когда предложение else опущено, так что вы можете смело оставить и это.
select count(foo)
from t1
where a = 1
union
select count(foo)
from t1
where b = 2
....
Это сделает это.
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
Не связан с StackOverflow