MYSQL-分组和计数查询
我有一个包含如下行的数据库MYSQL-分组和计数查询,mysql,group-by,count,Mysql,Group By,Count,我有一个包含如下行的数据库 title category ----------------------- super widget 1 ultimate widget 1 regular widget 1 happy widget 2 sad widget 2 ugly widget 3 pretty widget 3 使用下面的查询,我得到了一个很好的所有行的列表,其中有一个类似“widget”的标题,以及每个
title category
-----------------------
super widget 1
ultimate widget 1
regular widget 1
happy widget 2
sad widget 2
ugly widget 3
pretty widget 3
使用下面的查询,我得到了一个很好的所有行的列表,其中有一个类似“widget”的标题,以及每个类别中有多少行的计数。所以结果看起来像
catid itemcount
-------------------
1 3
2 2
3 2
SELECT catid, COUNT(*) AS 'itemcount' FROM allwidgets
WHERE title like '%widget%' GROUP BY catid;
我需要改变这个。我想以一个列表结束,其中显示有多少属于类别3,还有多少属于所有其他类别,因此结果将是
catid itemcount
------------------
3 2
allothers 5
我可以用两个查询来完成,一个是获取完整计数,另一个是获取catid 3计数,然后减去它们,但是一个查询可以吗 您可以使用
CASE
表达式:
SELECT CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END AS catid,COUNT(*) AS itemcount
FROM allwidgets
WHERE title like '%widget%'
GROUP BY CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END;
您可以使用
CASE
表达式:
SELECT CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END AS catid,COUNT(*) AS itemcount
FROM allwidgets
WHERE title like '%widget%'
GROUP BY CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END;
看起来不错。但是您应该只对字符串文本使用单引号。你可以把它变成一个简单的
,因为itemcount
。看起来不错。但是您应该只对字符串文本使用单引号。您可以将其设置为itemcount。