我必须创建一个mysql查询来获得超过特定日期的每一天的投票分配,类似这样......
date yes_votes no_votes
------------------------------------------
2010-01-07 21 22
2010-01-07 2 0
Run Code Online (Sandbox Code Playgroud)
我的桌子就像这样..
post_votes
--------------------------
id(longint)
date(timestamp)
flag(tinyint) // this stores the yes/no votes 1-yes, 2-no
Run Code Online (Sandbox Code Playgroud)
我被困在这....
SELECT COUNT(*) AS count, DATE(date) FROM post_votes WHERE date > '2010-07-01' GROUP BY DATE(date)
Run Code Online (Sandbox Code Playgroud)
这给出了每天的总投票数,但不是我想要的分配数.
ype*_*eᵀᴹ 10
SELECT COUNT(*) AS count
, DATE(date)
, SUM(flag = 1) AS yes_votes
, SUM(flag = 2) AS no_votes
FROM post_votes
WHERE date > '2010-07-01'
GROUP BY DATE(date)
Run Code Online (Sandbox Code Playgroud)
这是一个适用于MySQL的技巧,flag=1可以是True或者False.但True = 1与False = 0MySQL中,所以你可以添加使用1和0 SUM()的功能.
其他解决方案,IF或者CASE更好的清晰度,或者如果您有可能想要将数据库移动到另一个RDBMS.
与该问题无关的评论:
date或者count命名字段或表是不好的习惯.post_vote)而不是复数 - 尽管许多使用复数,但最终会让人感到困惑.对于某些领域或计算字段来说,复数是有用的,比如你yes_votes和no_votes我们计算的地方. 总结一下:
select date(date) as date,
sum(case when flag = 1 then 1 else 0) as yes,
sum(case when flag = 2 then 1 else 0) as no
from post_votes
where date > '2010-07-01'
group by date(date)
Run Code Online (Sandbox Code Playgroud)