1、2018年4月份的用户数、订单量、销量、GMV (不局限与这些统计量,你也可以自己想一些)

  1. -- -- -- 20184月份的用户数量
  2. select
  3. count(a.user_id) as user_nums
  4. from
  5. (
  6. select
  7. user_id
  8. from
  9. app_jypt_m04_ord_det_di
  10. where
  11. dt >= '2018-04-01'
  12. and sale_ord_dt <= '2018-04-30'
  13. and sale_ord_dt >= '2018-04-01'
  14. group by
  15. user_id
  16. )
  17. a;
  18. -- 20184月份的订单量
  19. select
  20. count(a.sale_ord_id) as sale_nums
  21. from
  22. (
  23. select
  24. sale_ord_id
  25. from
  26. app_jypt_m04_ord_det_di
  27. where
  28. dt >= '2018-04-01'
  29. and sale_ord_dt <= '2018-04-30'
  30. and sale_ord_dt >= '2018-04-01'
  31. group by
  32. sale_ord_id
  33. )
  34. a;
  35. -- -- 20184月份的销量
  36. select
  37. sum(COALESCE(sale_qtty, 0)) as xiaoliang
  38. from
  39. app_jypt_m04_ord_det_di
  40. where
  41. dt >= '2018-04-01'
  42. and sale_ord_dt <= '2018-04-30'
  43. and sale_ord_dt >= '2018-04-01';
  44. -- -- -- 20184月份的销售额GMV
  45. -- user_payable_pay_amount 用户应付金额
  46. select
  47. sum(user_payable_pay_amount) as xiaoshoujine
  48. from
  49. app_jypt_m04_ord_det_di
  50. where
  51. dt >= '2018-04-01'
  52. and sale_ord_dt <= '2018-04-30'
  53. and sale_ord_dt >= '2018-04-01';

  

PS: 

  • 订单数就是卖了几单 ;
  • 销量就是卖了多少件,一个订单中可能卖出一件或多件;
  • GMV: Gross Merchandise Volume,是成交总额(一定时间段内)的意思。
  • 在电商网站定义里面是网站成交金额。这个实际指的是拍下订单金额, 包含付款和未付款的部分。

2、上述这些变化量相对3月份的变化


3、计算2018年4月1号的新用户数量(之前半年未购买的用户为新用户)

  1. -- 计算201841号的新用户数量(之前半年未购买的用户为新用户)
  2. -- 首先找出41号的用户的xxx,然后统计半年内有过购买记录的用户yyy
  3.  
  4. -- select distinct user_id as xxx from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01';
  5. -- select distinct user_id as yyy from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01';
  6.  
  7. -- xxx-yyy,然后count()计算数量;
  8.  
  9. -- 两种方法,一种用not in ,一种用not exists
  10.  
  11. -- not in 方法
  12. select distinct user_id from gdm_m04_ord_det_sum
  13. where user_id not in (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01');
  14.  
  15. -- not exists 方法
  16. select distinct user_id from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01' where not exists (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01' where gdm_m04_ord_det_sum.user_id=gdm_m04_ord_det_sum.user_id);
  17.  
  18. -- 另一种 left outer join 这样效率更高 语法有问题??
  19.  
  20. select distinct user_id from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01' a left outer join (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01' b) on a.user_id=b.user_id where b.user_id is null;

 

正确方法:

  1. select
  2. count(a.id1) as user_new_nums
  3. from
  4. (
  5. select distinct
  6. user_id as id1
  7. from
  8. app_jypt_m04_ord_det_di
  9. where
  10. dt >= '2018-04-01'
  11. and sale_ord_dt = '2018-04-01'
  12. )
  13. a
  14. left outer join
  15. (
  16. select distinct
  17. user_id as id2
  18. from
  19. app_jypt_m04_ord_det_di
  20. where
  21. dt >= '2017-10-01'
  22. and sale_ord_dt <= '2018-03-31'
  23. and sale_ord_dt >= '2017-10-01'
  24. )
  25. b
  26. on
  27. a.id1 = b.id2
  28. where
  29. b.id2 is null;

  

Hive 练习 简单任务处理的更多相关文章

  1. Hive 的简单使用及调优参考文档

    Hive 的简单使用及调优参考文档   HIVE的使用 命令行界面 使用一下命令查看hive的命令行页面, hive --help --service cli 简化命令为hive –h 会输出下面的这 ...

  2. [转]Hive:简单查询不启用Mapreduce job而启用Fetch task

    转自:http://www.iteblog.com/archives/831 如果你想查询某个表的某一列,Hive默认是会启用MapReduce Job来完成这个任务,如下: hive> SEL ...

  3. hive中简单介绍分区表

    所介绍内容基本上是翻译官方文档,比较肤浅,如有错误,请指正! hive中创建分区表没有什么复杂的分区类型(范围分区.列表分区.hash分区.混合分区等).分区列也不是表中的一个实际的字段,而是一个或者 ...

  4. [Hive_add_3] Hive 进行简单数据处理

    0. 说明 通过 Hive 对 duowan 数据进行简单处理 1. 操作流程 1.1 建表 create table duowan(id int, name string, pass string, ...

  5. hive 中简单的udf函数编写

    .注册函数,使用using jar方式在hdfs上引用udf库. $hive.注销函数,只需要删除mysql的hive数据记录即可. delete from func_ru ; delete from ...

  6. hive中简单介绍分区表(partition table)——动态分区(dynamic partition)、静态分区(static partition)

    一.基本概念 hive中分区表分为:范围分区.列表分区.hash分区.混合分区等. 分区列:分区列不是表中的一个实际的字段,而是一个或者多个伪列.翻译一下是:“在表的数据文件中实际上并不保存分区列的信 ...

  7. Hive之简单查询不启用MapReduce

    假设你想查询某个表的某一列.Hive默认是会启用MapReduce Job来完毕这个任务,例如以下: 01 hive> SELECT id, money FROM m limit 10; 02 ...

  8. hive的简单使用

    一.一些说明 1.支持的操作 hive 默认不支持updata 和 delete操作 insert也是执行缓慢,主要用于数据的计算 hive 数据类型---字符串,大部分与java一致. 2.内外表的 ...

  9. hadoop生态系统学习之路(六)hive的简单使用

    一.hive的基本概念与原理 Hive是基于Hadoop之上的数据仓库,能够存储.查询和分析存储在 Hadoop 中的大规模数据. Hive 定义了简单的类 SQL 查询语言,称为 HQL.它同意熟悉 ...

随机推荐

  1. struts2核心配置之struts.xml

    struts.xml -常量配置 -包配置 -包含配置 一.常量配置 struts2常量的配置通常采用三种方式: 1.在struts.xml中使用<constant>元素配置常量 < ...

  2. sed 很棒的介绍

    选项与参数:-n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作) ...

  3. [xsy1515]小学生数学题

    题意:求$\begin{align*}\left(\sum\limits_{i=1}^n\dfrac 1i\right)\%\ p^k\end{align*}$ 数学真是太可爱了== 直接推公式 设$ ...

  4. 【扩展欧几里得】poj2115 C Looooops

    题意大概是让你求(A+Cx) mod 2^k = B的最小非负整数解. 若(B-A) mod gcd(C,2^k) = 0,就有解,否则无解. 式子可以化成Cx + 2^k*y = B - A,可以用 ...

  5. 【并查集】bzoj1015 [JSOI2008]星球大战starwar

    倒着处理删点,就变成了加点,于是并查集. #include<cstdio> using namespace std; #define N 400001 int fa[N],kill[N], ...

  6. Enable a SQL Server Trace Flag Globally on Linux

    https://www.mssqltips.com/sql-server-tip-category/226/sql-server-on-linux// Microsoft has recently r ...

  7. windbg学习—-.ecxr

      .ecxr 命令定位当前异常的上下文信息,并显示指定记录中的重要寄存器 0:000> .ecxr eax=10000000 ebx=7ffd9000 ecx=77386500 edx=002 ...

  8. MathType如何插入连乘

    这个就是连乘符号,只不过看着不习惯......就在眼皮子底下.

  9. 【Git】GitHub for Windows使用(1)

    目录 1.下载GitHub for windows 客户端 2.注册GitHub 3.启动windows端客户端,登录帐号 4.了解Git客户端,从而了解Git的大体功能 5.创建一个新的资源库  6 ...

  10. [干货]2017已来,最全面试总结——这些Android面试题你一定需要

        地址.http://blog.csdn.net/xhmj12/article/details/54730883 相关阅读: 吊炸天!74款APP完整源码! [干货精品,值得收藏]超全的一线互联 ...