Mysql 如何对每行中的最小计算值求和?

Mysql 如何对每行中的最小计算值求和?,mysql,Mysql,在这种情况下,我需要你的建议 具有以下SQL查询 SELECT MONTHNAME(r.date_of_application) month_name, MONTH(r.date_of_application) month, SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) pending, SUM(CASE WHEN status = 'attende

在这种情况下,我需要你的建议

具有以下SQL查询

SELECT 
    MONTHNAME(r.date_of_application) month_name,
    MONTH(r.date_of_application) month,
    SUM(CASE
        WHEN status = 'pending' THEN 1
        ELSE 0
    END) pending,
    SUM(CASE
        WHEN status = 'attended' THEN 1
        ELSE 0
    END) attended,
    SUM(CASE
        WHEN status = 'absent' THEN 1
        ELSE 0
    END) absent,
    SUM(CASE
        WHEN status = 'canceled' THEN 1
        ELSE 0
    END) canceled
FROM
    request r
        INNER JOIN
    user u ON u.id = r.user_id
GROUP BY month_name , month
ORDER BY 2 DESC;
我得到这个结果

+------------+-------+---------+----------+--------+----------+
| month_name | month | pending | attended | absent | canceled |
+------------+-------+---------+----------+--------+----------+
| October    |    10 |       4 |        1 |      0 |        1 |
+------------+-------+---------+----------+--------+----------+
现在,我想对列
挂起
出席
缺席
取消
的值求和,并将结果添加到一个新列
总计

这是预期的结果

+------------+-------+---------+----------+--------+----------+-------+
| month_name | month | pending | attended | absent | canceled | total |
+------------+-------+---------+----------+--------+----------+-------+
| October    |    10 |       4 |        1 |      0 |        1 |    6 |
+------------+-------+---------+----------+--------+----------+-------+
此查询可能有许多结果

提前感谢

只需添加一个
COUNT(*)
聚合术语即可捕获所有状态的全部计数:

SELECT 
    MONTHNAME(r.date_of_application) month_name,
    MONTH(r.date_of_application) month,
    COUNT(CASE WHEN status = 'pending'  THEN 1 END) pending,
    COUNT(CASE WHEN status = 'attended' THEN 1 END) attended,
    COUNT(CASE WHEN status = 'absent'   THEN 1 END) absent,
    COUNT(CASE WHEN status = 'canceled' THEN 1 END) canceled,
    COUNT(*) total
FROM request r
INNER JOIN user u
    ON u.id = r.user_id
GROUP BY
    month_name , month
ORDER BY 2 DESC;
注意:如果希望
总计
仅包括当前清点的四个
状态
值,则使用条件聚合:

COUNT(CASE WHEN status IN ('pending', 'attended', 'absent', 'cancelled')
           THEN 1 END) AS total

您在预期输出中的总数不等于组件的总和。我刚刚更新了问题我猜sum(status='pending')也会这样做thing@Strawberry猜错了总比从不猜好。最好避免使用非ANSI标准的扩展,除非使用它们会带来一些主要的好处,比如性能。