首先是需求分析:
现在有一个门店表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
执行出来的结果是:
问题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
查询出来的结果是:
Mysql的这些关键词在学校的时候还用过,但是出来上班之后用的比较少了,需要多用,多熟练
上一篇: 换了个工作,换了个心情...
下一篇: 分享一个Mysql备份...