mysql 平均月份_Mysql按月份统计和按时段统计SQL

本文介绍了如何使用MySQL进行按月份和时段统计门店销售数据的方法。通过FROM_UNIXTIME函数转换时间戳并利用GROUP BY进行分组,结合WHEN THEN语句实现时段统计,为数据分析提供便利。
摘要由CSDN通过智能技术生成

首先是需求分析:

现在有一个门店表store,记录着多家门店。S1,S2,S3...等

还有一个订单表orders,记录着订单,其中订单表D的store_id关联S表的主键ID

现在需要统计每个月份每个门店的销量,和每个门店0点-8点,8点-24点的销量

处理

问题1,需要统计分月分门店数据,GROUP BY分组查询就好,其中这里的问题在于分月。由于数据库中存的时间是时间戳格式(这里建议大家都存时间戳,方便统计分析)所以需要转换格式

查询到Myqsl的时间转换函数是:FROM_UNIXTIME。其中%c是转换出来的月份 01-12

大致搭建出来的SQL是:SELECT

sum(o.订单单价) AS money,

o.store_id,

s.storename,

count(o.id) AS nums,

FROM_UNIXTIME(o.addtime, '%c') AS months

FROM

orders o

INNER JOIN store s ON s.id = o.store_id

WHERE

o.state = 1

AND o.addtime > 1483200000

GROUP BY

store_id,

months

HAVING

months IS NOT NULL

执行出来的结果是:

0328fead25272c9b645762d2a3c70986.png

问题2:分时段统计

因为需要分时段统计订单,那么数据处理的时候就不能直接拿出来分组了。所以这里用到WHEN THEN这个关键词,其中的%H 转出来是 00-23

搭建出来的SQL是SELECT

COUNT(orders.id) AS nums,

sum(cash_fee) AS money,

store_id,

CASE

WHEN (

FROM_UNIXTIME(addtime, '%H:%i:%s') BETWEEN '00:00:00'

AND '07:59:59'

) THEN

'00:00:00~08:00:00'

WHEN (

FROM_UNIXTIME(addtime, '%H:%i:%s') BETWEEN '08:00:00'

AND '23:59:59'

) THEN

'08:00:00~23:59:59'

END AS timetype

FROM

orders

JOIN store s ON orders.store_id = s.id

WHERE

addtime IS NOT NULL

AND orders.state = 1

GROUP BY

timetype,

store_id

查询出来的结果是:

aebe17a2528b13ad218c803c0eb9ee28.png

Mysql的这些关键词在学校的时候还用过,但是出来上班之后用的比较少了,需要多用,多熟练

aea0ce8c4eaf1a7b0cb2648506c30595.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值