MySQL sum on条件在视图中不起作用

MySQL sum on条件在视图中不起作用,mysql,sql,Mysql,Sql,在MySQL(v5.5)中,当选择视图的所有行时,numNotCast、numInFavor的值始终为0。若select语句是单独执行的(不在视图中),它将按预期工作,返回正确的投票列行数,该行数等于值“notcast”和“infavor” CREATE OR REPLACE VIEW `Stats` AS select sum(case when `p`.`vote` = 'notcast' then 1 else 0 end) AS `numNotC

在MySQL(v5.5)中,当选择视图的所有行时,numNotCast、numInFavor的值始终为0。若select语句是单独执行的(不在视图中),它将按预期工作,返回正确的投票列行数,该行数等于值“notcast”和“infavor”

    CREATE OR REPLACE
    VIEW `Stats` AS
    select 
        sum(case when `p`.`vote` = 'notcast' then 1 else 0 end) AS `numNotCast`,
        sum(case when `p`.`vote` = 'infavor' then 1 else 0 end) AS `numInFavor`
    from
        (`Debate` `d`
        join `Participant` `p` ON ((`d`.`debateId` = `p`.`debateId`)))
    group by `d`.`debateId`

这是对MySQL视图的限制吗?如何在视图中完成此条件求和功能?

那么您的语句是正确的,因此您的问题可能在其他地方

CREATE OR REPLACE VIEW Stats AS    
select 
  Debate.debateId,
  sum(case when Participant.vote='notcast' then 1 else 0 end) as numNotCast,
  sum(case when Participant.vote='infavor' then 1 else 0 end) as numInFavor
from
  Debate
inner join 
  Participant on Participant.debateId = Debate.debateId
group by
  Debate.debateId

在澄清之后更新了

MySQL视图中有很多限制,但我不认为这是其中之一

我觉得很奇怪,视图的名称用单引号括起来。这可能是允许的,但视图可能不是您想要的。试试这个:

CREATE OR REPLACE VIEW `Stats` AS
    select sum(case when `p`.`vote` = 'notcast' then 1 else 0 end) AS `numNotCast`
    from `Debate` `d` join
         `Participant` `p`
         ON `d`.`debateId` = `p`.`debateId`
    group by `d`.`debateId`;
顺便说一下,在MySQL中,您可以将
select
简化为:

select sum(p.vote = 'notcast') as numNotCast

不是问题,单引号是我的输入错误,我更正了。请尝试按NumNotCast desc执行
排序,查看是否缺少任何行。@Gordon Linoff,感谢简化的
select
提示需要对多个值求和。我编辑了原始帖子以澄清。@HandyManDan在这种情况下,你的解决方案应该是可行的,我创建了一个例子来验证创建小提琴和确认这一工作的可行性。我通过将MySQL更新到最新的5.5.37(从5.5.29)解决了这个问题。我不认为这是一个bug,但显然是一个版本相关的问题。