首页 > 解决方案 > 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

使用下面的查询,我得到了一个很好的列表,其中包含所有行的标题,如“小部件”以及每个类别中有多少行的计数。所以结果看起来像

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

我可以用 2 个查询来完成,一个得到完整计数,另一个得到 catid 3 个计数,然后减去它们,但是一个查询可以吗?

标签: mysqlgroup-bycount

解决方案


你可以使用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;

推荐阅读