SQL:基于列值的Count()

Bri*_*nKE 19 sql count

我有一张表如下:

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)

请参阅SQL Fiddle with Demo


Grz*_*lik 5

像这样的东西:

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()只计算不为空值。