mysql - 分组时如何与条件求和

标签 mysql sql aggregate-functions

我有一个行列表,我想在分组时对行数求和(一种计数),但仅当对于每一行,字段 customField=0 .

示例:

title       customField
aaa         1
aaa         0
bbb         0
ccc         1
bbb         1
aaa         0

所以,输出应该是:

aaa 2
bbb 1
ccc 0

如何使用 MySql 实现?

编辑

事实上我真正的查询是这个:

SELECT forum_categories.title, COUNT(forum_topics.id) AS total_topics, COUNT(forum_messages.id) AS total_replies, MAX(forum_messages.date) AS last_message
FROM forum_categories
JOIN forum_topics ON forum_topics.category_id = forum_categories.id 
JOIN forum_messages ON forum_messages.topic_id = forum_topics.id
GROUP BY forum_categories.id ORDER BY forum_categories.date

只有当 forum_messages.original=0 时,我才必须计算 COUNT(forum_messages.id) AS total_replies,这就是我请求 SUM 的原因:)

最佳答案

只过滤结果集排除customField=1,即

  SELECT title, COUNT(*) AS numTitle
    FROM yourtable
   WHERE customField = 0
GROUP BY title
ORDER BY numTitle DESC

结果:

aaa 2
bbb 1

显示所有标题,包括计数为 0 的标题:(如果需要其他计数也很有用)

  SELECT title
       , SUM(CASE WHEN customField=0 THEN 1 ELSE 0 END) AS numTitle
    FROM yourtable
GROUP BY title
ORDER BY numTitle DESC

结果:

aaa 2
bbb 1
ccc 0

更紧凑(但仅适用于 MYSQL):

  SELECT title
       , SUM(customField=0) AS numTitle
    FROM yourtable
GROUP BY title
ORDER BY numTitle DESC

关于mysql - 分组时如何与条件求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917535/

相关文章:

mysql - 如何将字符串 append 到 MySQL 中的现有字段?

php - 与 Mysql 的连接未关闭

mysql - SQL比较行

php - 就像在 Laravel 中一样 - 未找到列 :1054

mysql - 计算多次登录的唯一用户数

javascript - 使用用户输入搜索 JSON 解析的 MySQL 数据

sql - 如何在列表框中显示多个字段?

mysql - 检索行中的不同值并计算总数

sql - 返回 sql 中属性共有的值的总和?

reporting-services - 如何将组内的聚合与SSRS中的跨组聚合