2010-04-11 12 views
6

mesaMySQL - dos cargos con diferentes donde en una consulta

field1 field2 
a  1 
b 
c  3 
e  4 
f 

Necesito contar campo1 y not empty field2 con el consulta:

SELECT COUNT(field1) FROM table 
+ 
SELECT COUNT(field2) FROM table WHERE field2 != '' 

resultado debe ser 5 y 3 in one query.

¿Es posible?

+0

quiero que 5 * y * 3, o simplemente 8 ? –

+0

campo1 = 5 y campo2 = 3 – Qiao

Respuesta

11

fácil como pastel :)

select count(field1), count(field2) 
from my_table 

Resultado:

+--------+--------+ 
| field1 | field2 | 
+--------+--------+ 
| 5  | 3  | 
+--------+--------+ 

Si los valores vacíos en field2 columna son '' (cadenas vacías) en lugar de real NULL, puede intentar esto:

select count(field1), sum(case when field2 != '' then 1 else 0 end) 
from my_table; 
+1

Eso va a devolver 5 y 5; 'count()' cuenta cualquier valor que no sea NULL, incluidas las cadenas vacías –

+1

@Michael Mrozek, sí, me di cuenta de que estaba usando '! = ''' en su pregunta y actualicé mi publicación en consecuencia. –

0

para combinar los resultados de las consultas con los formatos de columnas idénticas, utilice unión entre ellos

SELECT w FROM x 
UNION 
SELECT y FROM z 
7
SELECT 
    (SELECT COUNT(field1) FROM table) AS count1, 
    (SELECT COUNT(field2) FROM table WHERE field2 != '') AS count2 
+0

Este es mi favorito personal para una total simplicidad y semi-intuición. –

4

embargo, otra forma:

SELECT COUNT(field1), COUNT(IF(field2='', NULL, field2)) 
    FROM ... 
Cuestiones relacionadas