mysql - 使用 GROUP BY 时计算空值

标签 mysql sql

我正在计算给一个项目的投票数,只有两个可能的值:

vote = 1vote = 2

SELECT COUNT(*) AS count 
FROM match_votes
WHERE match_id = :match_id 
GROUP BY vote

但是,如果没有投票给 1 但投票给 2 那么它将只返回 1 行,因为它不计算空值。我想返回 vote = 1vote = 2 的计数,即使该项目没有投票。

此外,我想确保 vote = 1 的计数始终位于第一行。

最佳答案

你需要一个左连接:

select v.vote, count(mv.vote)
from (select 1 as vote union all select 2) v left join
     match_votes mv
     on mv.vote = v.vote
group by v.vote;

或者,将结果放在两列中:

select sum(mv.vote = 1) as vote_1, sum(mv.vote = 2) as vote_2
from match_votes mv;

关于mysql - 使用 GROUP BY 时计算空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957919/

相关文章:

MySQL:使用同一行上的列值进行计数

mysql - 如何在运行时打开 MySql 慢查询?

mysql - 使用两个角坐标创建空间矩形

php - 当数据库更新时,如何更新 php 内查询中的表和字段的名称?

mysql计算每个用户的书数并在每一行中显示

php - 使用 SQL JOIN 和 COUNT

sql - 存储大型城市以进行自动完成查询的最佳方式是什么?

mysql - 使用 mysqldump 时跳过或忽略临时表

php - 用于插入和选择的不同表

sql - 无论 EXISTS 还是 NOT EXISTS,SELECT 查询都返回相同的东西——为什么?