mysql 无符号填充零_mysql-按天/月统计数据,没有的填充为0

一、有些统计页面需要达到如下效果(按照月份分组计算数据)

817a279971134626ee63a43545e4ea47.png

二、在这里需要使用到mysql的几个函数

1、DATE_ADD() 函数向日期添加指定的时间间隔。

语法:

DATE_ADD(date,INTERVAL expr unit)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。unit是指定的时间间隔类型单位。

unit参数可以是下列值:

unit值

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_MINUTE

DAY_MICROSECOND

DAY_SECOND

DAY_MINUTE

DAY_HOUR

YEAR_MONTH

举例如下:

d167b6592a92c811f7a43f37400eb691.png

2、DATE_SUB() 函数从日期减去指定的时间间隔。

语法:

DATE_SUB(date,INTERVAL expr unit)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。unit是指定的时间间隔类型单位。

所用的unit单位和上面的DATE_ADD()完全一致

3、DAYOFYEAR(date)

date 参数是合法的日期表达式

返回date在一年中的日数, 在1到366范围内。

e62efce2d444d7d6fe95c57e9887bd84.png

三、先看看执行结果,然后在详解sql

SELECT

left(temp.date,7) as dateAbscissa,

IFNULL(u.unmber,0) as thisYearCost

from(

SELECT date_add(DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY), interval numlist.id month) AS 'date' FROM

(

SELECT * from

(SELECT i AS id FROM num ) a

where a.id <=11

) AS numlist

WHERE adddate(DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY), interval numlist.id month)<=

concat(YEAR(now()),'-12-31')) temp

LEFT JOIN

(

SELECT

left(c.statistics_date,7) AS udate,

SUM(c.operation_number) as unmber

FROM

t_hospitalization_operation c

WHERE

1 = 1

GROUP BY left(c.statistics_date,7)

) u on left(temp.date,7) = u.udate ORDER BY temp.date

结果如下

b38cd9b2a49903820399d7dde51bd901.png

四、分步解释sql

前提:需要一张中间表num,数据如下

249dcd344d505e9776b8a4f04e05b124.png

31f9bae1adfc776e02cc8cac38c083c5.png

然后LEFT JOIN 本身的数据表,既可达到效果,

# 按照天数统计

SELECT

temp.date as dateAbscissa,

IFNULL(u.singleDiseasesNum,0) as singleDiseasesNum,

IFNULL(u.multidisciplinaryNum,0) as multidisciplinaryNum

from( SELECT DATE_ADD((date_add(date_add(last_day(now()),interval 1 day),interval -1 month)),INTERVAL numlist.id DAY)AS 'date' FROM

(

SELECT * from

(SELECT i AS id FROM num ) a

where a.id <=30

) AS numlist

) temp

LEFT JOIN

(

SELECT

DATE(c.create_time) AS udate,

COUNT(if( c.audit_opinion='3' ,1,NULL) )as singleDiseasesNum,

COUNT(if( c.audit_opinion='4' ,1,NULL) )as multidisciplinaryNum

FROM

t_mdt_apply_list c

WHERE

1 = 1

GROUP BY DATE(c.create_time)

) u on DATE(temp.date) = u.udate ORDER BY temp.date

811a0bca57c96a3e91b5ebde61729596.png

参考:https://blog.csdn.net/JavaReact/article/details/79994555

仍在不断学习中,欢迎大家留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值