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

results matching ""

    No results matching ""