1. 按月累加
场景:按月统计近半年注册总人数,假如1月新增1, 2月新增1,3月新增1 select * from user;
USER_ID | NAME | CREATE_TIME |
---|---|---|
1 | ZS | 2020-01-01 |
2 | LS | 2020-02-01 |
3 | WW | 2020-03-01 |
4 | ZL | 2020-03-02 |
则结果:
月份 | 当月人数 | 总人数 |
---|---|---|
1月 | 1 | 1 |
2月 | 1 | 2 |
3月 | 2 | 4 |
过程:
首先格式转换为 按月统计的数据 group by 月份。
临时表tmp 2个字段。MM,NUM
select to_char(create_time,'yyyy-mm') mm,cout(*) num from user group by to_char(create_time,'yyyy-mm')
| MM | NUM | | ------- | ---- | | 2020-01 | 1 | | 2020-02 | 1 | | 2020-03 | 2 |
也可先把时间CREATE_TIME格式化,再统计
select mm,count(*) from (
select user_id,name,to_char(create_time,'yyyy-mm') mm from user
) group by mm
半年也在此筛选。可用数据库自带 日期函数。
DM7 /ORCALE
SELECT SYSDATE,TO_CHAR(ADD_MONTHS(SYSDATE,-6),'yyyy-mm'),TO_CHAR(SYSDATE,'yyyy-mm') FROM DUAL
2020-07-07 16:15:37 2020-01 2020-07
MYSQL
select date_sub(now(), interval 6 month) from dual;
用子查询来统计累加
select mm,num, (select sum(num) from tmp a where a.mm<=t.mm ) ‘总人数‘ from tmp t
总结:累加即是sum。每条数据对应 多条数据汇总的结果,且在一条记录展示。则考虑(关联查询的汇总结果当其中一个字段) 。条件是和外面的表的条件相比。
补充:mysql 里 now() 和sysdate() 区别:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值
select now(), SYSDATE(), sleep(3), now(), SYSDATE();
2020-07-07 16:28:34 2020-07-07 16:28:34 0 2020-07-07 16:28:34 2020-07-07 16:28:37