【问题标题】:MYSQL - GROUP BY and COUNT queryMYSQL - GROUP BY 和 COUNT 查询
【发布时间】:2019-04-03 21:42:49
【问题描述】:

我有一个包含这样行的数据库

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

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

【问题讨论】:

    标签: mysql group-by count


    【解决方案1】:

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

    【讨论】:

    • 看起来不错。但是您应该只对字符串文字使用单引号。你可以把它变成一个简单的AS itemcount
    猜你喜欢
    • 2021-12-19
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2020-05-17
    • 2015-09-22
    相关资源
    最近更新 更多