昨天运营的同事突然让帮忙查询统计数据,有几个数据之前没有处理过,遂记录下来。

  1. 每日付费的总人数。

一开始看到这个的时候觉得很简单,只要按照购买日期分组就可以了,SQL如下

SELECT COUNT(1),DATE(create_time) AS buy_date
FROM stock_app.t_order
WHERE DATE(create_time)
BETWEEN '2019-02-14'
AND '2019-04-23'
GROUP BY buy_date
ORDER BY buy_date

但是查完才发现数据对不上,因为同一个用户可能一天会购买不止一单,但是只能算一个,所以还需要做去重处理,SQL如下

SELECT COUNT(DISTINCT userid),DATE(create_time) AS buy_date
FROM stock_app.t_order
WHERE DATE(create_time)
BETWEEN '2019-02-14'
AND '2019-04-23'
GROUP BY buy_date
ORDER BY buy_date

COUNT(DISTINCT userid) 可以对相同的userid进行去重处理。

  1. 首付费人数

顾名思义就是第一次购买的用户,我们可以先查询出每个用户的首单的订单号,SQL如下

SELECT order_id
FROM  stock_app.t_order a
RIGHT JOIN (SELECT MIN(create_time) AS first_order_time,useridFROM stock_app.t_orderGROUP BY userid
) b ON a.userid = b.userid AND a.create_time = b.first_order_time

然后将查询结果作为子查询的条件的做分组查询,SQL如下

SELECT COUNT(1),DATE(create_time) AS buy_date
FROM stock_app.t_order
WHERE DATE(create_time) BETWEEN '2019-02-14' AND '2019-04-23'
AND order_id IN (SELECT order_idFROM  stock_app.t_order aRIGHT JOIN (SELECT MIN(create_time) AS first_order_time,useridFROM stock_app.t_orderGROUP BY userid) b ON a.userid = b.userid AND a.create_time = b.first_order_time
)
GROUP BY buy_date
ORDER BY buy_date
  1. 重复购买用户数

需要先查出一天购买多次的用户和订单时间,SQL如下

SELECT  userid,DATE(create_time) AS buy_date
FROM stock_app.t_order
WHERE DATE(create_time)
BETWEEN '2019-02-14'
AND '2019-04-23'
GROUP BY userid,buy_date
HAVING COUNT(userid) > 1
ORDER BY buy_date

再分组查询每天的重复用户数,如下

SELECT COUNT(1),buy_date
FROM
(SELECT  userid,DATE(create_time) AS buy_dateFROM stock_app.t_order WHERE DATE(create_time) BETWEEN '2019-02-14' AND '2019-04-23'GROUP BY userid,buy_date HAVING COUNT(userid) > 1ORDER BY buy_date
) t1
GROUP BY buy_date
ORDER BY buy_date
  1. 首付费用户购买金额最多的产品

先分组查询出每天各个产品的销售金额,并按金额从大到小排序,再对查询结果按交易日期分组,如下

SELECT  product,buy_date
FROM
(SELECT product,SUM(total_fee) AS sum_fee,DATE(create_time) AS buy_dateFROM stock_app.t_order  aWHERE DATE(create_time) BETWEEN '2019-02-14' AND '2019-04-23'AND userid  NOT IN (SELECT userid FROM stock_app.t_order WHERE DATE(create_time) < DATE(a.create_time)GROUP BY userid)GROUP BY product,buy_date ORDER BY buy_date,sum_fee DESC
) t1
GROUP BY buy_date
  1. 重复购买用户购买金额最多的产品

这个第4个查询差不多,但是需要联表查询重复购买的用户,如下

SELECT  product,sum_fee,buy_date
FROM
(
SELECT product,SUM(total_fee) AS sum_fee,DATE(create_time) AS buy_date
FROM stock_app.t_order  a
RIGHT JOIN(SELECT  userid,DATE(create_time) AS buy_dateFROM stock_app.t_order WHERE DATE(create_time) BETWEEN '2019-02-14' AND '2019-04-23'GROUP BY userid,buy_date HAVING COUNT(userid) > 1ORDER BY buy_date
) b ON a.userid = b.userid AND DATE(a.create_time) = b.buy_date
WHERE DATE(create_time)
BETWEEN '2019-02-14'
AND '2019-04-23'
GROUP BY product,buy_date
ORDER BY buy_date,sum_fee DESC
) t1
GROUP BY buy_date

仅供参考

MySQL 查询统计订单相关推荐

  1. mysql一秒查询次数_单个select语句实现MySQL查询统计次数

    单个select语句实现MySQL查询统计次数 单个select语句实现MySQL查询统计次数的方法用处在哪里呢?用处太多了,比如一个成绩单,你要查询及格得人数与不及格的人数,怎么一次查询出来? My ...

  2. Mysql查询统计按年月日(年、季、月、周、日)

    Mysql查询统计:按年.季.月.周.日 按年统计交易金额. SELECTsum(goods_fee),YEAR (FROM_UNIXTIME(create_time, '%Y-%m-%d')) FR ...

  3. Mysql 查询统计练习

    2019独角兽企业重金招聘Python工程师标准>>> 1.建表 customers 顾客表 products 产品表 orders 订单表 -- 顾客表 CREATE TABLE ...

  4. MySQL 查询统计 日期查询

    文章目录 1. 查询前7天的日期 2. 查询订单表出现日期,成交额总和 3 根据日期统计数据 1. 查询前7天的日期 select a.click_date from (SELECT date_sub ...

  5. MySQL查询统计今年12个月的数据,没有默认为空

    此处先省略二百字的废话 做报表统计的时候,常常需要在MySQL端用sql统计近12个月的数据,或者近30天的数据. 假如遇到当月没有数据,或者当天没有数据时,默认为0. SELECTCASE WHEN ...

  6. Mysql实时统计订单数量_Spark实时统计订单量

    背景 用户下单数据会通过业务系统实时产生入库到mysql库,我们要统计通某个推广渠道实时下单量,以便线上运营推广人员查看不同渠道推广效果进而执行不同推广策略 系统架构 架构图 注:组件不了解的同学可参 ...

  7. mysql 查询一个订单下多个商品_如何商品信息多个sql查询搜索

    重点sql语句的处理 $sql= "select * from ht_order o,tb_user u where o.BuyerId=u.UserID ";//sql语句,这是 ...

  8. mysql查询统计不及格人数_MySQL,查询及格人数,不及格人数

    一个表score,字段是name,class,score.分别代表姓名,所在班级,分数. 要求用一条语句查出每个班的及格人数和不及格人数,格式为:class,及格人数,不及格人数. SELECT `c ...

  9. mysql查询女生的成绩_MySQL 统计查询实现代码

    $conn = @mysql_connect("localhost","root","root123"); if (!$conn){ die ...

  10. mysql实现统计查询_MySQL 统计查询实现代码

    统计数据行数 SELECT COUNT() FROM 语法用于从数据表中统计数据行数. 语法: SELECT COUNT(column) FROM tb_name 该 SQL 语法用于统计某一字段的数 ...

最新文章

  1. TFS的Web门户工作项(七)
  2. GIL(全局解释器锁)与互斥锁
  3. 如何调试Android Framework?
  4. GIS 中openstreetmap数据获取
  5. CodeForces 689B Mike and Shortcuts (bfs or 最短路)
  6. linux下libpcap抓包分析
  7. CSS中em和px单位的区别(转)
  8. Java基础拾遗:线程相关问题
  9. jQuery学习之五---效果
  10. Vue项目开发相关问题总结
  11. html 屏幕录像,Screencastify:屏幕录像
  12. 关于MSN群 创建MSN群 使用MSN群
  13. 注册公司的基本流程 version_1.0
  14. Firefox 插件 FlashGot 创建 Axel 下载任务
  15. 构建自己的 LINUX 系统(二)
  16. 曾几何时,还是游吟长安的醉客
  17. 动人的牵线美的连接符-两张表的查询(一)
  18. 红光光浴抗衰机制#大健康#红光光浴#红光#种光光学
  19. web应用程序安全性测试_Web应用程序导航菜单的可访问性
  20. 安装PHPStudy(小皮)V8.1最详细安装教程

热门文章

  1. 对主流网络威胁情报标准应用的比较研究
  2. 百度地图API计算经纬度
  3. LeetCode-Python-275. H指数 II
  4. 商务部关于促进电子商务规范发展的意见
  5. openlayers4+中高德导航路径的实现
  6. 最终结束漂泊的身份-我办理北京人才引进的经历
  7. (轉貼) 完全用Linux工作,摈弃Windows (OS) (Linux)
  8. 【测试源】【rtmp flv hls】拉流播放测试
  9. 语法错误 : 缺少“;”(在“*”的前面)_学科教学不能缺少生本意识
  10. [NPUCTF2020]碰上彩虹,吃定彩虹