2010-04-11 10 views
6

tavoloMySQL - due conteggi con diversa WHERE in una query

field1 field2 
a  1 
b 
c  3 
e  4 
f 

Devo contare field1 e not empty field2 con il query:

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

risultato dovrebbe essere 5 e 3 in one query.

È possibile?

+0

Vuoi 5 * e * 3, o solo 8 ? –

+0

field1 = 5 e field2 = 3 – Qiao

risposta

11

Facile come torta :)

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

Risultato:

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

Se i valori vuoti sono field2 colonna sono '' (stringhe vuote) al posto del reale NULL, si può provare questo:

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

Questo restituirà 5 e 5; 'count()' conta qualsiasi valore che non sia NULL, comprese le stringhe vuote –

+1

@Michael Mrozek, sì ho notato che stava usando '! = ''' nella sua domanda e ha aggiornato il mio post di conseguenza. –

0

per combinare i risultati delle query con i formati delle colonne identiche, utilizzare unione tra loro

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

Questo è il mio preferito per semplicità assoluta e semi-intuitività. –

4

Ancora un altro modo:

SELECT COUNT(field1), COUNT(IF(field2='', NULL, field2)) 
    FROM ... 
Problemi correlati