MySQL sum on条件在视图中不起作用
在MySQL(v5.5)中,当选择视图的所有行时,numNotCast、numInFavor的值始终为0。若select语句是单独执行的(不在视图中),它将按预期工作,返回正确的投票列行数,该行数等于值“notcast”和“infavor”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
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,但显然是一个版本相关的问题。