2010-04-11 2 views
6

таблицеMySQL - два графов с различными где в одном запросе

field1 field2 
a  1 
b 
c  3 
e  4 
f 

мне нужно подсчитать field1 и not empty field2 с по запросу:

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

результат должен быть 5 и 3 in one query.

Возможно ли это?

+0

Хотите 5 * и * 3, или только 8 ? –

+0

field1 = 5 и field2 = 3 – Qiao

ответ

11

легко, как пирог :)

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

Результат:

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

Если пустые значения в field2 колонки являются '' (пустые строки) вместо фактического NULL, вы можете попробовать это:

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

Это собирается вернуть 5 и 5; 'count()' подсчитывает любое значение, которое не является NULL, включая пустые строки –

+1

@Michael Mrozek, да, я заметил, что он использовал '! = ''' в своем вопросе и обновил мое сообщение соответственно. –

0

объединить результаты запросов с одинаковыми форматами столбцов, используйте UNION между ними

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

Это мой личный фаворит для полной простоты и полуинтуитивности. –

4

Еще один способ:

SELECT COUNT(field1), COUNT(IF(field2='', NULL, field2)) 
    FROM ... 
Смежные вопросы