Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL-分组和计数查询_Mysql_Group By_Count - Fatal编程技术网

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。