2012-08-28 12 views
5

Angenommen, ich eine Tabelle wie folgt aus:Gefiltert Anzahl und Gesamtzählung ohne Unterabfrage

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

Gibt es eine einfache Möglichkeit, COUNT WHERE result = 'fail' AND total COUNT zu finden.

Erwarteter Ausgang:

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

Ja, wir können dies mit Unterabfrage wie folgt tun:

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

Aber ist es eine Möglichkeit, wie dies zu tun:

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

I am trying in this fiddle.

+0

@Downvoter: What't das Problem? – hims056

Antwort

13

ANSI SQL

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

SQLFiddle Demo

MySQL Spezifische (wie spitz durch eggyal)

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

SQLFiddle Demo

+0

In MySQL kann man es auf 'SUM (Result = 'fail')' abkürzen. – eggyal

+0

@eggyal, du hast recht, korrigiert; =) –

+0

@eggyal Danke. Du hast genau das kommentiert, was ich in MySQL wollte. – hims056

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

Und ja wir können auch wie folgt verwenden:

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

See this SQLFiddle

Verwandte Themen