2012-08-28 24 views
5

Supongamos que tengo una tabla como la siguiente:recuento filtrada y el recuento total y sin subconsulta

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

¿Hay alguna forma sencilla de encontrar COUNT WHERE result = 'fail' AND total COUNT.

salida esperada:

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

Sí, podemos hacer esto utilizando sub consulta como esta:

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

Pero, ¿hay alguna manera de hacerlo de esta manera:

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

I am trying in this fiddle.

+0

@Downvoter: What't el problema? – hims056

Respuesta

13

ANSI SQL

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

SQLFiddle Demo

MySQL específico (como se ha señalado por eggyal)

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

SQLFiddle Demo

+0

En MySQL, uno puede abreviarlo como 'SUM (Result = 'fail')'. – eggyal

+0

@eggyal, tienes razón, corregido; =) –

+0

@eggyal Gracias. Comentó exactamente lo que quería en MySQL. – hims056

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

Y sí también podemos utilizar la siguiente manera:

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

See this SQLFiddle

Cuestiones relacionadas