具有不同where子句的相同查询

时间:2015-07-22 10:37:17

标签: php mysql

我有一张桌子:

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-1enddate=2015-3-1 我的输出应该是:

date        passed   failed   
2015-2-1     5         3
2015-3-1     1          2

输出应包含上述相同月份的传递和失败总数(无论主题如何)。

这是我使用的查询: startdate=2015-2-1enddate=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月... 请提出替代方案。

3 个答案:

答案 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`
  

输出

enter image description here

  

参考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子句将根据需要显示每月的数据。