我有一张表如下:
CallID | CompanyID | OutcomeID
----------------------------------
1234 | 3344 | 36
1235 | 3344 | 36
1236 | 3344 | 36
1237 | 3344 | 37
1238 | 3344 | 39
1239 | 6677 | 37
1240 | 6677 | 37
Run Code Online (Sandbox Code Playgroud)
我想创建一个SQL脚本来计算Sales结果的数量和所有其他尝试的数量(任何<> 36),类似于:
CompanyID | SalesCount | NonSalesCount
------------------------------------------
3344 | 3 | 1
6677 | 0 | 2
Run Code Online (Sandbox Code Playgroud)
有没有办法做COUNT()包含像COUNT这样的条件(CallID WHERE OutcomeID = 36)?
Tar*_*ryn 66
您可以将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;
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
SELECT companyId,
COUNT(CASE WHEN outcomeid = 36 THEN 1 END) SalesCount,
COUNT(CASE WHEN outcomeid <> 36 THEN 1 END) NonSalesCount
FROM
yourtable
GROUP BY
companyId
Run Code Online (Sandbox Code Playgroud)
应该工作 -COUNT()只计算不为空值。