2012-08-28 20 views
5

Załóżmy, że mam tabeli jak poniżej:Filtrowana liczba i łączna liczba bez podzapytanie

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

Czy jest jakiś prosty sposób na znalezienie COUNT WHERE result = 'fail' AND total COUNT.

wyjście z oczekiwaniami:

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

Tak, możemy to zrobić za pomocą podzapytania takiego:

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

Ale czy jest jakiś sposób, żeby zrobić tak:

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

I am trying in this fiddle.

+0

@Downvoter: What't problem? – hims056

Odpowiedz

13

ANSI SQL

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

SQLFiddle Demo

MySQL Specific (jak wskazano przez eggyal)

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

SQLFiddle Demo

+0

W MySQL można skrócić go do 'SUM (Result = 'fail')'. – eggyal

+0

@eggyal, masz rację, poprawiono; =) –

+0

@eggyal Dzięki. Skomentowałeś dokładnie to, czego chciałem w MySQL. – hims056

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

I tak możemy również używać tak:

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

See this SQLFiddle