[英]MySQL COUNT with group by or distinct
我有表“對象”:
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”的行
使用條件分組:
SELECT COUNT(*) FROM objects
GROUP BY CASE
WHEN group_id IS NULL THEN id
ELSE group_id
END
COUNT()僅對NON_NULL值遞增,因此
select count(distinct IFNULL(group_id,'-9nTfx')) from objects;
將從您的樣本數據中返回3,“ AAA”,“ BBB”和NULL分別為1。
您要求的結果是5,所以我建議這樣做:
select
count(distinct group_id)
+ count(case when group_id IS NULL then 1 end)
from objects;
@used_by_already解釋得很好。 我剛剛完成了這個演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.