2010-04-11 79 views
6

MySQL的 - 两项不同的WHERE在一个查询

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 ? – 2010-04-11 00:26:57

+0

field1 = 5和field2 = 3 – Qiao 2010-04-11 00:34:59

回答

11

UNION:

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

如果中的空值柱是''(空字符串),而不是实际NULL,你可以试试这个:

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

这将返回5和5; 'count()'计数任何非NULL值,包括空字符串 – 2010-04-11 00:31:05

+1

@Michael Mrozek,是的,我注意到他在他的问题中使用'!='''并且相应地更新了我的帖子。 – 2010-04-11 00:35:39

0

与相同的列格式查询的结果结合起来,用作馅饼:)

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

结果他们很容易与

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

这是我个人最喜欢的完全简单和半直观。 – 2013-08-30 18:46:46

4

还有一种方法:

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