计算包含特定值的总记录数

use*_*030 8 sql case count conditional-statements

我有一个问题,希望你们能帮助我.

我有一个包含两列的表:

type           // contains 2 different values: "Raid" and "Hold"
authorization  // contains 2 different values: "Accepted" or "Denied"
Run Code Online (Sandbox Code Playgroud)

我需要创建一个返回如下值的视图:

TYPE:RAID     ACCEPTED:5          DENIED:7
Run Code Online (Sandbox Code Playgroud)

基本上我想知道有多少值TYPE是"Raid",然后有多少是"已接受"和"被拒绝".

先感谢您!!

Phi*_*ley 16

SELECT
   Type
  ,sum(case Authorization when 'Accepted' then 1 else 0 end) Accepted
  ,sum(case Authorization when 'Denied' then 1 else 0 end) Denied
 from MyTable
 where Type = 'RAID'
 group by Type
Run Code Online (Sandbox Code Playgroud)


kni*_*ttl 5

您可以COUNTCASE语句结合使用

SELECT COUNT(CASE authorization WHEN 'denied' THEN 1 ELSE NULL END) as denied,
  COUNT(CASE authorization WHEN 'authorized' THEN 1 ELSE NULL END) as authorized
FROM table
WHERE type = 'RAID'
Run Code Online (Sandbox Code Playgroud)

SUM(CASE …)也是可能的,但你必须0ELSE子句中返回而不是NULL


Sim*_*erg 5

此代码应适用于mySQL

SELECT type, COUNT(*)
FROM table
GROUP BY type;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT type, authorization, COUNT(*)
FROM table
GROUP BY type, authorization;
Run Code Online (Sandbox Code Playgroud)