当前位置:   article > 正文

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/838145
推荐阅读
相关标签
  

闽ICP备14008679号