您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

统计一周内每天销售总额SQL语句

时间:06-14来源:作者:点击数:

一、问题:

前端需求:

在这里插入图片描述

表结构

在这里插入图片描述

通过前端給过来的图,我们只需要统计一周内的订单总量和 订单总金额,一开始我的想法是写多个sql语句,然后再插入到一个数组中去,最后的结果你知道的,效率很低很低。

为了能够卷赢其他成员,我只好努力百度百度。

在这里插入图片描述

二、实现

最后实现的SQL:不用烦,我当初第一眼和你看这个一模一样的,一度感觉自己从来没有学习过mysql。😂

select a.clickDate,ifnull(b.salesSum,0) as salesSum,ifnull(b.orderCount,0) as orderCount
from (
    SELECT curdate() as clickDate
    union all
    SELECT date_sub(curdate(), interval 1 day) as clickDate
    union all
    SELECT date_sub(curdate(), interval 2 day) as clickDate
    union all
    SELECT date_sub(curdate(), interval 3 day) as clickDate
    union all
    SELECT date_sub(curdate(), interval 4 day) as clickDate
    union all
    SELECT date_sub(curdate(), interval 5 day) as clickDate
    union all
    SELECT date_sub(curdate(), interval 6 day) as clickDate
) a left join (
    select date(payment_time) as datetime, sum(payment_price) as salesSum ,count(id) as orderCount
    from t_order
    where state in (1,2,3)
    group by date(payment_time)
) b on a.clickDate = b.datetime;

三、解析

下面给大家解释一下哈哦。

  1. curdate():mysql 的函数,返回当前的日期
    在这里插入图片描述
  2. union all
    MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
  3. date_sub(curdate(), interval 1 day)
    也是Mysql 里的一种函数,它的原型是这样的DATE_SUB(date,INTERVAL expr type)
    date参数是合法的日期表达式。expr参数是您希望添加的时间间隔。INTERVAL 和 expr是关键字,
    type 类型,这里的day就代表天数,type类型有多种,年月日时分等等好像都有,在这里没展示,有需求可以去查的哦。
    这句sql的意思就是 得到当前时间减去一天的时间点人话就是得到昨天的时间。
  4. (结果集)a意思是将查询出来的结果集称作为a 表
  5. ifnull(b.orderCount,0)刚刚差点忘了,这个意思是补零的意思,就是你查询出来的结果是null,展示的时候给补齐为 0。
  6. a,b 两表,就是封装出来的两个结果集。
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门