前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统计一周内每天销售总额SQL语句

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

作者头像
宁在春
发布2022-10-31 14:39:12
8930
发布2022-10-31 14:39:12
举报
文章被收录于专栏:关于Java学习@宁在春

背景: 统计七天销售额 mysql 语句实现 带有详图、详细解析。 最近和同学们一起写了小项目练手,前端突然给我提了一个需求,就是让我提供一个接口,统计一周的销售总额和订单总量,刚看到这个需求时,还觉得特别简单,但是一去写SQL,就发现了大问题。那个sql 一直不知道改如何写。 疯狂百度,最后通过查看多个大佬的博客,终于整出了SQL 语句。 下方有表结构 和 sql 语句。

一、问题:

前端需求:

在这里插入图片描述
在这里插入图片描述

表结构

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

二、实现

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

代码语言:javascript
复制
        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 的函数,返回当前的日期
在这里插入图片描述
在这里插入图片描述
  1. union all MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
  2. date_sub(curdate(), interval 1 day) 也是Mysql 里的一种函数,它的原型是这样的 DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。INTERVAL 和 expr 是关键字, type 类型,这里的 day 就代表天数,type类型有多种,年月日时分等等好像都有,在这里没展示,有需求可以去查的哦。 这句sql的意思就是 得到 当前时间减去一天的时间点 人话就是得到昨天的时间。
  3. (结果集)a 意思是将查询出来的结果集称作为 a 表
  4. ifnull(b.orderCount,0) 刚刚差点忘了,这个意思是补零的意思,就是你查询出来的结果是null,展示的时候给补齐为 0。
  5. a,b 两表,就是封装出来的两个结果集。

自言自语

从我关注的大佬博客中偷个图(_陈哈哈)微信群中扣不出。😂

在这里插入图片描述
在这里插入图片描述

如果哪里写的不对,记得留言哦,感谢阅读。一起加油哦。 希望你能在这里收货到知识,如果没能,就收个小表情吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题:
  • 二、实现
  • 三、解析
  • 自言自语
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档