首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用mysql生成统计信息

使用mysql生成统计信息
EN

Stack Overflow用户
提问于 2009-09-27 20:33:18
回答 2查看 899关注 0票数 0

如何编写一条sql语句来返回在过去12个月中每个月有多少students拥有lessons的列表?

因此,我希望输出如下所示:

代码语言:javascript
运行
复制
+--------+----------------+
| Month  | No of Students |
+--------+----------------+
| Oct 08 |  12            |
| ...    |  ...           |
| ...    |  ...           |
| Sep 09 |  15            |
+-------------------------+

编辑:相关模式-

代码语言:javascript
运行
复制
lessons{student_id:INT, time:DATE}
student{id:INT, person_id:INT}

学生可以在一个给定的月份上任意数量的课,所以我对一个月内有多少课不感兴趣,而是对那个月有多少学生上了课感兴趣

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-27 22:00:13

您可以在group by中使用date_format来实现您想要的结果,因为您只想做一个count distinct

代码语言:javascript
运行
复制
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的数量,那么您可以这样做:

代码语言:javascript
运行
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2009-09-27 20:38:01

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1484408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档