2012-08-28 33 views
5

假设我有一个表是这样的:过滤数和总数不子查询

ID  Result 
------------- 
1  ,  'pass' 
2  ,  'pass' 
3  ,  'fail' 
4  ,  'fail' 
5  ,  'fail' 
6 ,   'fail' 

有没有什么简单的方法来找到COUNT WHERE result = 'fail' AND total COUNT

预期输出:

FailCount TotalCount 
----------------------- 
    4   6 

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

SELECT 
(SELECT COUNT(result) FROM t WHERE result='fail') AS FAILCount 
, COUNT(result) 
AS TotalCount FROM t; 

但有什么办法可以这样做:

SELECT COUNT(WHERE Result='fail') , COUNT(Result) FROM ... 

I am trying in this fiddle.

+0

@Downvoter:What't问题? – hims056

回答

13

ANSI SQL

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

SQLFiddle Demo

MySQL的具体(由eggyal如指出)

SELECT 
     SUM(Result='fail') , 
     COUNT(*) FROM ... 

SQLFiddle Demo

+0

在MySQL中,可以将其缩写为SUM(Result ='fail')'。 – eggyal

+0

@eggyal,你说得对,更正了; =) –

+0

@eggyal谢谢。您在MySQL中完全评论了我想要的内容。 – hims056

0
SELECT 
    SUM(CASE WHEN Result='fail' THEN 1 ELSE 0 END) as FailCount, 
    COUNT(Result) as TotalCount FROM table_name 
4

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

SELECT 
    COUNT(CASE WHEN Result='fail' THEN 1 ELSE NULL END) , 
    COUNT(*) FROM ... 

See this SQLFiddle