2010-04-11 10 views
6

TabelleMySQL - zwei Zählungen mit unterschiedlichem WHERE in einer Abfrage

field1 field2 
a  1 
b 
c  3 
e  4 
f 

brauche ich field1 und not empty field2 mit auf Abfrage zählen:

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

Ergebnis 5 sein sollte und 3 in one query.

Ist es möglich?

+0

Haben Sie 5 wollen * und * 3 oder nur 8 ? –

+0

field1 = 5 und field2 = 3 – Qiao

Antwort

11

Leicht :)

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

Ergebnis:

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

Wenn die leeren Werte in der field2 Spalte sind '' (leere Strings) anstelle der tatsächlichen NULL, können Sie dies versuchen:

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

Das wird 5 und 5 zurückgeben; 'count()' zählt jeden Wert, der nicht NULL ist, einschließlich leerer Strings –

+1

@Michael Mrozek, ja, ich bemerkte, dass er '! = ''' in seiner Frage verwendete und meinen Post dementsprechend aktualisierte. –

0

die Ergebnisse von Abfragen mit identischen Spaltenformate zu kombinieren, verwenden UNION zwischen ihnen

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

Dies ist mein persönlicher Favorit für absolute Einfachheit und Semi-Intuitivität. –

4

noch eine weitere Möglichkeit:

SELECT COUNT(field1), COUNT(IF(field2='', NULL, field2)) 
    FROM ... 
Verwandte Themen