一尘不染

SQL:基于列值的Count()

sql

我有一张桌子,如下所示:

CallID   | CompanyID  | OutcomeID
----------------------------------
1234     | 3344       | 36
1235     | 3344       | 36
1236     | 3344       | 36
1237     | 3344       | 37
1238     | 3344       | 39
1239     | 6677       | 37
1240     | 6677       | 37

我想创建一个SQL脚本,该脚本计算Sales结果的数量以及所有其他尝试的数量(<> 36),例如:

CompanyID  | SalesCount  | NonSalesCount
------------------------------------------
3344       | 3           | 1
6677       | 0           | 2

有没有办法做一个包含像COUNT(CallID WHERE OutcomeID = 36)这样的条件的COUNT()?


阅读 184

收藏
2021-03-17

共1个答案

一尘不染

您可以对合计使用CASE表达式,以根据outcomeId值获得总计:

select companyId,
  sum(case when outcomeid = 36 then 1 else 0 end) SalesCount,
  sum(case when outcomeid <> 36 then 1 else 0 end) NonSalesCount
from yourtable
group by companyId;

参见带有演示的SQL Fiddle

2021-03-17