统计⼀周内每天销售总额SQL语句
背景:
统计七天销售额 mysql 语句实现 带有详图、详细解析。
最近和同学们⼀起写了⼩项⽬练⼿,前端突然给我提了⼀个需求,就是让我提供⼀个接⼝,统计⼀周的销售总额和订单总量,刚看到这个需求时,还觉得特别简单,但是⼀去写SQL,就发现了⼤问题。那个sql ⼀直不知道改如何写。
疯狂百度,最后通过查看多个⼤佬的博客,终于整出了SQL 语句。
下⽅有表结构 和 sql 语句。
⼀、问题:
前端需求:
通过前端給过来的图,我们只需要统计⼀周内的订单总量和 订单总⾦额,⼀开始我的想法是写多个sql语句,然后再插⼊到⼀个数组中去,最后的结果你知道的,效率很低很低。
为了能够卷赢其他成员,我只好努⼒百度百度。
⼆、实现
最后实现的SQL: 不⽤烦,我当初第⼀眼和你看这个⼀模⼀样的,⼀度感觉⾃⼰从来没有学习过mysql。
select a.clickDate,ifnull(b.salesSum,0)as salesSum,derCount,0)as orderCount
from(
SELECT curdate()as clickDate
union all
SELECT date_sub(curdate(),interval1day)as clickDate
union all
SELECT date_sub(curdate(),interval2day)as clickDate
union all
SELECT date_sub(curdate(),interval3day)as clickDate
union all
SELECT date_sub(curdate(),interval4day)as clickDate
union all
SELECT date_sub(curdate(),interval5day)as clickDate
union all
SELECT date_sub(curdate(),interval6day)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. derCount,0) 刚刚差点忘了,这个意思是补零的意思,就是你查询出来的结果是null,展⽰的时候给补齐为 0。
6. a,b 两表,就是封装出来的两个结果集。
⾃⾔⾃语
从我关注的⼤佬博客中偷个图()中扣不出。
每天学点sql经典句子
如果哪⾥写的不对,记得留⾔哦,感谢阅读。⼀起加油哦。
希望你能在这⾥收货到知识,如果没能,就收个⼩表情吧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。