过滤的计数和没有子查询的总计数

him*_*056 6 mysql sql count

假设我有一个这样的表:

ID     Result
-------------
 1  ,  'pass'
 2  ,  'pass'
 3  ,  'fail'
 4  ,  'fail'
 5  ,  'fail'
 6 ,   'fail'
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以找到COUNT WHERE result = 'fail' AND total COUNT.

预期产量:

FailCount    TotalCount
-----------------------
    4            6
Run Code Online (Sandbox Code Playgroud)

是的,我们可以使用这样的子查询来做到这一点:

SELECT 
(SELECT COUNT(result) FROM t WHERE result='fail') AS FAILCount
, COUNT(result)
AS TotalCount FROM t;
Run Code Online (Sandbox Code Playgroud)

但有没有办法这样做:

SELECT COUNT(WHERE Result='fail') , COUNT(Result) FROM ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个小提琴.

Rap*_*aus 15

ANSI SQL

SELECT 
   SUM(CASE WHEN Result='fail' THEN 1 ELSE 0 END) , 
   COUNT(*) FROM ...
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示

MySQL特定(由eggyal指出)

SELECT 
       SUM(Result='fail') , 
       COUNT(*) FROM ...
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示


him*_*056 5

是的,我们也可以COUNT这样使用:

SELECT 
   COUNT(CASE WHEN Result='fail' THEN 1 ELSE NULL END) , 
   COUNT(*) FROM ...
Run Code Online (Sandbox Code Playgroud)

请参阅此 SQLFiddle