2011-05-30 14 views
6

¿Es posible en MySQL para hacer algo como esto:seleccionar más de un cargo en MySQL

SELECT COUNT(*) as totalcount, 
     COUNT(*) WHERE foo IS NULL as conditional_count 
    FROM baz 

es decir, conseguir dos cargos, uno de todo, y una de las cosas que coincidan con una cláusula WHERE, en un solo seleccione ?

+0

debería ser así 'SELECT COUNT (*) como totalCount, (SELECT COUNT (*) donde foo es NULL) como conditional_count DE baz' se trata de una sola consulta pero con subconsulta dentro –

+0

@ Skowron línea Por favor, publicar como respuesta –

Respuesta

11

Esto funcionaría si su base de datos es compatible con la instrucción CASE WHEN, de lo contrario, seguirá teniendo la idea básica.

SELECT COUNT(*), 
     SUM(CASE WHEN FOO IS NULL THEN 1 ELSE 0 END) AS COUNT_CONDITIONAL 
    FROM baz 
+0

+1: vencerme por 25 segundos –

+0

marcó esto como mejor porque lo probé y funcionó. El método de sub selección de skowron-line también se veía bien, pero parece que no funciona con mi versión de MySQL. – AmbroseChapel

0

tratan con UNION (no probado)

SELECT COUNT(*) as totalcount FROM baz 
UNION 
SELECT COUNT(*) WHERE foo IS NULL as conditional_count FROM baz 
+0

Esto devolvería 2 registros con 1 campo en lugar de 1 registro con 2 campos –

+0

Esto le da dos filas con una columna llamada 'totalcount'. –

-1

no creo que esto es posible. Creo que necesitarías dos consultas.

Select count(*) from baz 

Select count(foo) from baz where foo is null 
2

debería ser así SELECT COUNT(*) as totalcount, (SELECT COUNT(*) WHERE foo IS NULL) as conditional_count FROM baz se trata de una sola consulta pero con subconsulta dentro

recuento
+0

Se ve bien, pero no funciona con el servidor MySQL 5.0.37 que es lo que estoy usando. – AmbroseChapel

+0

Hmmm puede estar usando 5.5.8 y esas consultas funcionan bien –

1

SELECT () como totalCount, (select count () DE Baz donde foo es NULL) como conditional_count FROM baz;

No puedo colocar la estrella (*) entre los corchetes de conteo !!! Lo puse, pero no puedo mostrarlo.