Skip to content

Latest commit

 

History

History
89 lines (48 loc) · 1.98 KB

按月累加.md

File metadata and controls

89 lines (48 loc) · 1.98 KB

按月累加

场景:按月统计近半年注册总人数,假如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