我有桌子"对象":
id (int)
name (varchar)
group_id (varchar) default null
我做了一些插页:
insert into objects values
(null, 'Cat', null),
(null, 'Dog', null),
(null, 'Mouse', 'AAA'),
(null, 'Eagle', 'BBB'),
(null, 'Elephant', null),
(null, ' Bull', 'AAA');
我需要计算总行数。但是,group_id为" AAA"的两行。应合并为一行。 在上面的示例中" count"应该返回" 5"。这是因为:
使用group_id进行计数似乎不是解决方案,因为它返回3行,并且对于每行它给出计数。我只需要总行数。
使用DISTINCT似乎也无济于事。查询:
select count(distinct(group_id)) from objects;
返回值为" 2"
的行答案 0 :(得分:2)
USE Group by条件:
SELECT COUNT(*) FROM objects
GROUP BY CASE
WHEN group_id IS NULL THEN id
ELSE group_id
END
答案 1 :(得分:2)
COUNT()仅增加NON_NULL值,所以
select count(distinct IFNULL(group_id,'-9nTfx')) from objects;
将从您的样本数据返回3,每个为“AAA”'BBB'并且为NULL。
你要求的结果为5,所以我建议:
select
count(distinct group_id)
+ count(case when group_id IS NULL then 1 end)
from objects;
@used_by_already解释得很好。我刚刚完成了这个演示
答案 2 :(得分:0)
第二个答案作为考试的测试结果存在。
MySQL 5.6架构设置:
查询2 :
SELECT COUNT(*) FROM objects
GROUP BY CASE
WHEN group_id IS NULL THEN id
ELSE group_id
END
<强> Results 强>:
| COUNT(*) |
|----------|
| 1 |
| 1 |
| 1 |
| 2 |
| 1 |