查询结果要求.png

表结构.png

一、需求分析

统计2018年12月,【每日】的【新增用户在新增当天的充值笔数】、【每日充值的人员当中属于当日新增用户的人数】和【每日新增用户充值的总金额】,新增用户在新增日后的充值均不在统计范围内

二、测试分析:

1. 数据表选择:输出字段要求包含充值日期DATE、充值次数JYBS(count(A.trade_no))、充值人数CZRS(count(DISTINCT A.user_id))、充值金额CZJE(sum(A.trade_price)),所以选取le_user_deposit表 AS A;

2. 约束条件:业务发生时间是在2018年12月内,且必须是新增用户,而对于新增用户的选择,需要关联le_user AS B 表进行筛选

所以查询语句的Where条件必须限定业务发生的时间(A.gmt_create BETWEEN '2018-01-01 00:00:00' AND '2018-12-31 23:59:59'),并且排除掉在12.01之前已注册用户 B.gmt_create >= '2018-12-01 00:00:00'的业务

3. 场景设计:只统计新增用户在新增日当天的充值业务,即5种情况须考虑

①用户A在12.01当天注册并充值1笔,该笔数据统计;

②用户A在12.02/12.03/12.05这几天均有充值,该部分数据不统计,所以查询语句中必须要排除非注册当天的业务数据;

③用户B在12.01当天注册,但当天未充值,而是在12.03号充值,则该数据不统计;

④用户C在12.01当天注册,且充值多笔,则充值次数JYBS统计多次,充值人数CZRS只统计1次,充值金额CZJE累计多笔

⑤用户D已注册用户B在12.01当天充值,该部分数据不统计,所以where条件必须判断

三、创建数据,验证sql语句正确性

-- 1.1 创建用户表

CREATE TABLE `le_user` (

`user_id` varchar(20) DEFAULT NULL COMMENT '用户ID',

`phone_num` varchar(20) DEFAULT NULL COMMENT '用户手机号码',

`gmt_create` datetime DEFAULT NULL COMMENT '用户数据生成时间',

`gmt_modify` datetime DEFAULT NULL COMMENT '用户数据修改时间'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 1.2 创建用户充值记录表

CREATE TABLE `le_user_deposit` (

`deposit_id` varchar(20) DEFAULT NULL COMMENT '用户主键ID',

`user_id` varchar(20) DEFAULT NULL COMMENT '用户ID',

`trade_no` varchar(128) DEFAULT NULL COMMENT '交易订单号',

`trade_price` varchar(16) DEFAULT NULL COMMENT '交易金额',

`gmt_create` datetime DEFAULT NULL COMMENT '订单生成时间',

`gmt_modify` datetime DEFAULT NULL COMMENT '订单修改时间'

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 2.1 注册用户

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0001', '13100010001','2018-12-01 12:00:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0002', '13100010002','2018-12-01 12:00:19');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0003', '13100010003','2018-12-01 12:03:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0004', '13100010004','2018-12-01 12:40:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0000', '13100010000','2018-11-01 12:00:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0005', '13100010005','2018-12-11 12:00:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0006', '13100010006','2018-12-21 12:00:19');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0007', '13100010007','2018-12-12 12:03:09');

insert INTO le_user (user_id, phone_num, gmt_create) VALUES ('LE0008', '13100010008','2018-12-21 12:40:09');

-- 2.2 添加用户充值记录

-- (1). 用户A(LE0001)在12.01当日注册,并在当日和隔日充值多笔

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011209','LE0001','TN20181201120009','10.00','2018-12-01 12:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011219','LE0001','TN20181201121909','10.00','2018-12-01 12:19:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011240','LE0001','TN20181201124009','10.00','2018-12-01 12:40:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011310','LE0001','TN20181201131009','10.00','2018-12-01 13:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011340','LE0001','TN20181201124009','10.00','2018-12-01 13:40:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812021209','LE0001','TN20181202120009','15.00','2018-12-02 12:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812021219','LE0001','TN20181202121909','20.00','2018-12-02 12:19:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812021240','LE0001','TN20181202124009','30.00','2018-12-02 12:40:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812021310','LE0001','TN20181202131009','10.00','2018-12-02 13:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812021340','LE0001','TN20181202124009','10.00','2018-12-02 13:40:09');

-- (2)用户B(LE0002)在12.01当天注册,隔日12.03充值

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI20181203141009','LE0002','TN20181203141009','15.00','2018-12-03 14:10:09');

-- (3)用户C(LE0003)在12.01当天注册,且充值1笔

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812011809','LE0003','TN20181201180009','25.00','2018-12-01 18:10:09');

-- (4) 用户D(LE0000)在上月已注册当天充值,并在12月充值多笔

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201811011209','LE0000','TN20181101120009','10.00','2018-11-01 12:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI201812016209','LE0000','TN20181201160009','10.00','2018-12-01 16:10:09');

INSERT INTO le_user_deposit (deposit_id, user_id, trade_no, trade_price, gmt_create) VALUES ('DI20181202111009','LE0000','TN20181202111009','30.00','2018-12-02 11:10:09');

-- 3.1 查询所有数据

SELECT user_id, phone_num, date_format(gmt_create, '%Y-%m-%d') AS DATE_RE FROM le_user ORDER BY gmt_create ASC;

SELECT deposit_id, user_id, trade_no, trade_price, date_format(A.gmt_create, '%Y-%m-%d') AS DATE_user_create FROM le_user_deposit A ORDER BY A.gmt_create ASC;

-- 3.2 确定le_user_deposit表中每日充值的新增用户

select user_id, min(date_format(gmt_create, '%Y-%m-%d')) as date_cz from le_user_deposit group by user_id;

四、 查询语句

SELECT

date_format(A.gmt_create, '%Y-%m-%d') AS DATE_NEW,

count(A.deposit_id) AS CZBS,

count(DISTINCT A.user_id) AS CZRS,

sum(A.trade_price) CZJE

FROM le_user_deposit A

WHERE(A.gmt_create BETWEEN '2018-12-01 00:00:00' AND '2018-12-31 23:59:59')

AND A.user_id NOT IN (SELECT user_id FROM le_user WHERE gmt_create < '2018-12-01 00:00:00')

AND date_format(A.gmt_create, '%Y-%m-%d') IN (SELECT min(date_format(B.gmt_create, '%Y-%m-%d')) AS date_cz FROM le_user_deposit B WHERE B.gmt_create GROUP BY B.user_id)

GROUP BY DATE_NEW;

以上仅个人理解,场景考虑可能不全面,期待大家补充。

mysql 统计新增用户_Mysql 查询:统计某月每日新增用户在新增当天的充值笔数、当天新增用户充值的总人数和充值总金额...相关推荐

  1. mysql从小到大的语句_mysql 查询语句

    实例 -- 字段 -- id int -- name varchar -- sex  tinyint -- age  tinyint -- city varchar -- money decimal ...

  2. mysql 获取倒数第二_MySQL查询倒数第二条记录实现方法

    有时候会用到查询倒数第二条记录复制代码 代码如下:last=HolderChangeHistory.find_by_sql (["               SELECT * FROM h ...

  3. mysql 连续打卡_MySQL查询连续打卡信息?

    最近多次看到用SQL查询连续打卡信息问题,自己也实践一波.抛开问题本身,也是对MySQL窗口函数和自定义变量用法的一种练习. 01 建表 所用数据库为MySQL8.0,简单而不失一般性,建立一个仅有记 ...

  4. mysql 一周一月_mysql查询当天、本周,本月,上一个月的数据

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  5. mysql当年数据_MySql查询当年1-12月数据

    MySql查询当年1-12月数据. SELECT COUNT(*) AS JanTradingVolume, COALESCE(SUM(tt.amount),0) AS JanAmount, (SEL ...

  6. mysql的查询每个月的1号_MySql查询当年1-12月数据

    mysql查询当年1-12月数据. select count(*) as jantradingvolume, coalesce(sum(tt.amount),0) as janamount, (sel ...

  7. mysql统计个数_mysql查询统计数量

    CREATE TABLE `pl_org_region` ( `region_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '区域自增ID', `parent ...

  8. mysql 统计本月的_MySql查询当天、本周、本月、本季度、本年的数据

    1.今天 SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(NOW()); 2.昨天 SELECT * FROM 表名 WHERE TO_DAYS(NOW ...

  9. mysql 统计本月的_mysql 查询当天、本周,本月,上一个月的数据

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  10. mysql 求count和_MySQL的统计总数count(*)与count(id)或count(字段)的之间的各自效率性能对比...

    执行效果: 1.  count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和coun ...

最新文章

  1. 12月第三周安全要闻回顾:浏览器安全不容忽视,SSL弱点影响网站安全
  2. bp神经网络应用实例_自监督图神经网络
  3. 电脑重装系统文件会丢失吗_电脑黑屏,利用重装系统软件,把黑屏电脑里的文件拷出来...
  4. Java布尔类的compareTo()
  5. Android报表库aChartEngine系列
  6. 将shell命令结果直接输出到HDFS上
  7. jsp网页实现登录用户名于密码的验证(不涉及数据库操作)
  8. 二进制安装 kubernetes 1.12(四) - 部署 Node 节点组件
  9. 设计模式学习之策略模式(Strategy,行为型模式)(13)
  10. [转]Visual Studio 各版本区别
  11. pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html 打开激活窗口 选择 Activate new license
  12. python最简单的图形编程_图形化编程、Python、Java、C++到底哪个适合你?
  13. LeetCode 每日一题1006. 笨阶乘
  14. linux 命令安装 wine,Wine安装使用(适用Linux Mint 19与Ubuntu 18.04下)
  15. 拥抱AI!人工智能如何在疫情期间重塑娱乐业?
  16. 趣味实践 利用Python定制可爱的举牌小人
  17. 为什么python性能差
  18. 计算机专业春考难不难,春考很难录取吗
  19. 2021最详细的测试用例的设计方法及案例——骚操作
  20. SSL 为IP签发证书

热门文章

  1. APP定制开发之前,这6条铁律要牢记
  2. java获取本机外网ip
  3. echarts wordCloud画词云图(自定义背景)
  4. 用计算机发射wifi经常很卡,电脑WiFi上网速度慢原因解决办法
  5. 官网Tomcat下载方法
  6. XXX团队邮件工作制与日常工作原则V1.0
  7. 利用Gtihub+Vercel一键部署RSSHub教程(完全免费)
  8. UI——day3.IOS设计规范
  9. (转载)各类指数基金标的指数比较
  10. 一批信息查询网站汇总