我有一张桌子:
date passed failed subject
2015-2-1 2 1 maths
2015-2-1 3 2 cs
2015-3-1 1 2 maths
2015-12-1 2 1 maths
我有一个表单来选择开始日期和结束日期。
例如:如果我选择startdate = 2015-2-1
和enddate=2015-3-1
我的输出应该是:
date passed failed
2015-2-1 5 3
2015-3-1 1 2
输出应包含上述相同月份的传递和失败总数(无论主题如何)。
这是我使用的查询:
startdate=2015-2-1
和enddate=2015-3-1
SELECT SUM(passed) ,SUM(failed) FROM student_log WHERE
(DATE(`date`)='2015-2-1')
union
SELECT SUM(passed) ,SUM(failed) FROM student_log WHERE
(DATE(`date`)='2015-3-1')
它工作正常但是如果我的结束日期是12月,我应该重复我的工会查询到12月... 请提出替代方案。
答案 0 :(得分:1)
怎么样:
SELECT SUM(passed), SUM(failed), DATE(`date`)
FROM student_log
WHERE DATE(`date`) >= '2015-2-1' AND DATE(`date`) <= '2015-3-1'
GROUP BY DATE(`date`);
这将找到两个日期之间的所有测试,并从每天开始计算。
答案 1 :(得分:1)
您不需要单独的查询或加入或联盟
SELECT SUM(`pass`) as total_pass, SUM(`fail`) as total_fail
FROM pass_fail
WHERE (`date` = '2015-2-1' or `date` = '2015-3-1' )
GROUP BY `date`
输出
参考Group By
答案 2 :(得分:1)
此查询:
Select date,sum (passed),sum(failed) from Results group by date
为我返回以下结果:
date passed failed
2015-02-01 5 3
2015-03-01 1 2
2015-12-01 2 1
换句话说:group by子句将根据需要显示每月的数据。