mysql - 使用不同的 where 条件对列进行多次计数

标签 mysql sql

我有一个存储 admin_idcomment 的表,我正在尝试查询它以获取与每个管理员关联的不同评论的计数。

我正在尝试这样做:

select admin_id, 
        count(comment like 'Approved the claim for%') as Approved,
        count(comment like 'Rejected the claim for%') as Rejected,
        count(comment like 'Temporarily rejected (24 hour hold) the claim for%') as TempReject, 
        count(comment like 'Permanently rejected the claim for%') as PermReject
from admin_comments
group by admin_id

但是,这会产生以下结果:ApprovedRejectedTempRejectPermReject 列均相同,以及顶部的一行似乎将它们全部汇总在一起,其中 admin_idNULL:

enter image description here

我需要在查询中更改哪些内容才能获取按 admin_id 分组的每种类型评论的准确数字。

最佳答案

COUNT 不执行 bool 表达式,因此您不能在 COUNT 中使用 LIKE。您必须使用 CASE/WHEN

select admin_id, 
        count( WHEN comment like 'Approved the claim for%' THEN 1 ELSE NULL END) as Approved,
        count(WHEN comment like 'Rejected the claim for%' THEN 1 ELSE NULL END) ....

请注意,它必须为 NULL 而不是 0,因为 COUNT 计算非空值。 O 是非空值

关于mysql - 使用不同的 where 条件对列进行多次计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41584546/

相关文章:

mysql - 如何将非标准化字符串日期时间转换为 MySQL 日期时间?

php - 通过MySQL建站的优缺点

sql - TSQL - 语法大小写错误

mysql - 从两个表中选择相同的值对

java - org.hibernate.HibernateException : The database returned no natively generated identity value

mysql - 确定哪些商品被一起购买(杰卡德系数)

sql - EXEC(query) AT linkedServer 与 Oracle DB

sql - 从表中删除子表,SQL

java - 从服务器发送数据的最佳方式

mysql - 随时间变化的 Oracle Select