如何编写一条sql语句来返回在过去12个月中每个月有多少students
拥有lessons
的列表?
因此,我希望输出如下所示:
+--------+----------------+
| Month | No of Students |
+--------+----------------+
| Oct 08 | 12 |
| ... | ... |
| ... | ... |
| Sep 09 | 15 |
+-------------------------+
编辑:相关模式-
lessons{student_id:INT, time:DATE}
student{id:INT, person_id:INT}
学生可以在一个给定的月份上任意数量的课,所以我对一个月内有多少课不感兴趣,而是对那个月有多少学生上了课感兴趣
发布于 2009-09-27 22:00:13
您可以在group by
中使用date_format
来实现您想要的结果,因为您只想做一个count distinct
。
select
date_format(`time`, '%b %y') as `Month`,
count(distinct student_id) as NumberOfStudents
from
lessons
where
`time` >= date_add(date_add(current_date interval -12 months)
interval (-1)*(day(current_date)+1) days)
group by
date_format(`time`, '%b %y')
如果一个person_id
可以有多个student_id
,而您真正感兴趣的是唯一person_id
的数量,那么您可以这样做:
select
date_format(l.`time`, '%b %y') as `Month`,
count(distinct s.person_id) as NumberOfPeople
from
lessons l
inner join students s on
l.student_id = s.id
where
l.`time` >= dateadd(dateadd(current_date interval -12 months)
interval (-1)*(day(current_date)+1) days)
group by
date_format(l.`time`, '%b %y')
发布于 2009-09-27 20:38:01
CREATE TABLE tmp (student_id int(10), month int(4), year int(4));
INSERT INTO tmp
SELECT DISTINCT student.id, MONTH(time), YEAR(time)
FROM lessons INNER JOIN student ON lessons.student_id = student.id
WHERE PERIOD_ADD(time,12) > NOW();
SELECT count(*) FROM tmp
GROUP BY MONTH(month), YEAR(year);
DROP TABLE tmp;
https://stackoverflow.com/questions/1484408
复制相似问题