hive ETL之业绩报表sql

-- case4 --

--========== rates ==========--

app0    1
app1    2
app2    2
app3    3
app4    3
app5    3
app6    5
app7    5
app8    5
app9    5

CREATE EXTERNAL TABLE rates (
    app_name    STRING 
  , star_rates  STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db/rates';

create table app_ranks as
  select app_name as app
       , star_rates as stars
       , NTILE(3) OVER (ORDER BY star_rates DESC) as nt
       , row_number() OVER (ORDER BY star_rates DESC) as rn
       , rank() OVER (ORDER BY star_rates DESC) as rk
       , dense_rank() OVER (ORDER BY star_rates DESC) as drk
       , CUME_DIST() OVER (ORDER BY star_rates) as cd
       , PERCENT_RANK() OVER (ORDER BY star_rates) as pr
  from rates
  order by stars desc
;

select app, stars, cd, sum(cd) OVER (PARTITION BY stars ORDER BY rn ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from app_ranks;

select app, stars, cd, sum(cd) OVER (PARTITION BY stars ORDER BY rn ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) from app_ranks;

select app, stars, cd, sum(cd) OVER (PARTITION BY stars ORDER BY rn ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) from app_ranks;

select app, stars, rn, lead(rn) OVER (PARTITION BY stars ORDER BY rn), lag(rn) OVER (PARTITION BY stars ORDER BY rn) from app_ranks;

--========== visitors ==========--

d001    201301    101
d002    201301    102
d003    201301    103
d001    201302    111
d002    201302    112
d003    201302    113
d001    201303    121
d002    201303    122
d003    201303    123
d001    201304    131
d002    201304    132
d003    201304    133
d001    201305    141
d002    201305    142
d003    201305    143
d001    201306    151
d002    201306    152
d003    201306    153
d001    201307    201
d002    201307    202
d003    201307    203
d001    201308    211
d002    201308    212
d003    201308    213
d001    201309    221
d002    201309    222
d003    201309    223
d001    201310    231
d002    201310    232
d003    201310    233
d001    201311    241
d002    201311    242
d003    201311    243
d001    201312    301
d002    201312    302
d003    201312    303
d001    201401    301
d002    201401    302
d003    201401    303
d001    201402    211
d002    201402    212
d003    201402    213
d001    201403    271
d002    201403    272
d003    201403    273
d001    201404    331
d002    201404    332
d003    201404    333
d001    201405    351
d002    201405    352
d003    201405    353

CREATE EXTERNAL TABLE visitors (
    domain  STRING 
  , month   STRING
  , visitor STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/db/visitors';

select * from visitors where domain = 'd001';

select domain
     , month
     , visitor
     , first_value(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
     , last_value(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
     , lead(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
     , lag(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
from visitors
where domain = 'd001';

select domain
     , month
     , visitor
     , first_value(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
     , last_value(visitor) OVER (PARTITION BY domain ORDER BY month DESC)
     , lead(visitor, 1, 0) OVER (PARTITION BY domain ORDER BY month DESC)
     , lag(visitor, 1, 0) OVER (PARTITION BY domain ORDER BY month DESC)
     , lead(visitor, 12, 0) OVER (PARTITION BY domain ORDER BY month DESC)
     , lag(visitor, 12, 0) OVER (PARTITION BY domain ORDER BY month DESC)
from visitors
where domain = 'd001';

create table visitors_report as
  select domain
       , month
       , visitor
       , lead(visitor, 1, 0) OVER (PARTITION BY domain ORDER BY month DESC)            as last_mon
       , visitor - lead(visitor, 1, 0) OVER (PARTITION BY domain ORDER BY month DESC)  as delta_mon
       , lead(visitor, 12, 0) OVER (PARTITION BY domain ORDER BY month DESC)           as last_year
       , visitor - lead(visitor, 12, 0) OVER (PARTITION BY domain ORDER BY month DESC) as delta_year
  from visitors
;

select * from visitors_report where domain = 'd001' and month > '2014';

select month
     , domain
     , visitor
     , last_mon
     , last_year
from visitors_report
where (domain = 'd001' or domain = 'd002') and month > '2014'
order by month desc, domain asc
limit 100;

select month
     , domain
     , visitor
     , max(visitor) OVER (PARTITION BY month) as max_visitors
     , min(visitor) OVER (PARTITION BY month) as min_visitors
from visitors
where month > '2014'
order by month desc, domain asc;

select *
from (
select month
     , domain
     , visitor
     , max(visitor) OVER (PARTITION BY domain ORDER BY month DESC ROWS BETWEEN CURRENT ROW AND 12 FOLLOWING) as max_visitors_last_12_mon
     , min(visitor) OVER (PARTITION BY domain ORDER BY month DESC ROWS BETWEEN CURRENT ROW AND 12 FOLLOWING) as min_visitors_last_12_mon
from visitors
) v
where month > '20131'
order by month desc, domain asc;

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1717581

时间: 2024-11-10 00:28:07

hive ETL之业绩报表sql的相关文章

oracle 统计销售员销售业绩的sql(级联累加)

问题描述 oracle 统计销售员销售业绩的sql(级联累加) 销售员表 id name 销售额(万) 上级id 1 A 10 2 B 10 1 3 C 10 2 4 D 10 2 5 E 10 6 F 10 5 最后实现的结果是 id为1 的 总销售额是 40万 2的销售额 是30 万 3 的销售额10万 5的销售额是10 20万 ..... 就是从树的叶子开始依次将子节点的值加到父节点上 解决方案 create table xx_sale ( id number primary key, n

青岛海尔交出了上半年的业绩报表

摘要: 处在改革风口浪尖上的青岛海尔,交出了上半年的业绩报表.从财务报告上来看,这家公司并没有因为互联网转型而出现业绩上的波动.以下为青岛海尔财报的主要信息点: 1,营收. 处在改革风口浪尖上的青岛海尔,交出了上半年的业绩报表.从财务报告上来看,这家公司并没有因为互联网转型而出现业绩上的波动.以下为青岛海尔财报的主要信息点: 1,营收. 青岛海尔上半年营收470亿元,同比增长9.16%. 2,净利润. 青岛海尔上半年净利润25.8亿元,同比增长20.9%, 3,毛利率 毛利率为25%,同比提升0

hive ETL之物流行业-订单跟踪SLA sql

-- case1 -- --========== order_created ==========-- /* 10703007267488    2014-05-01 06:01:12.334+01 10101043505096    2014-05-01 07:28:12.342+01 10103043509747    2014-05-01 07:50:12.33+01 10103043501575    2014-05-01 09:27:12.33+01 10104043514061   

hive ETL之电商零售行业-推荐系统sql

-- case3 -- --========== f_orders ==========-- /* 11    2014-05-01 06:01:12.334+01    10703007267488    item8:2|item1:1 22    2014-05-01 07:28:12.342+01    10101043505096    item6:3|item3:2 33    2014-05-01 07:50:12.33+01    10103043509747    item7:7

hive ETL之广告行业-用户行为归类sql

-- case2 -- --========== click_log ==========-- /* 11    ad_101    2014-05-01 06:01:12.334+01 22    ad_102    2014-05-01 07:28:12.342+01 33    ad_103    2014-05-01 07:50:12.33+01 11    ad_104    2014-05-01 09:27:12.33+01 22    ad_103    2014-05-01 09

sqlServer中 分类报表sql技巧 ,很实用

server|sqlserver|技巧 有表 tableA 如下:-----------------------------------------------------id,    type ,   countNumber ,   countDate1 A 10  2005-02-01 21:23:342 B 8  2005-02-01 21:23:343 C 5  2005-02-01 21:23:344 B 4  2005-02-01 11:23:345 C 5  2005-02-01

数据仓库中复杂报表SQL语句写法

在数据仓库的基本报表制作过程中,通常会使用SQL作为数据源,可是普通的SQL实在不适合处理一些较为复杂的逻辑判断;一般而言,待查询的数据类型主要包括日期型.数字型.字符串这三类数据类型;在报表查询界面前段,实际上会对查询的数据作一些缺省处理,例如有些字段可输可不输,输入的字段需要按照输入的内容进行查询,而未输入的字段通常会选择忽略该条件的存在,如何判断该字段是否输入了呢,当然是针对这些未输入的字段提供一些缺省值了,例如某个数字类型的字段未输入,则赋一个缺省值-1,某个字符串字段未输入,则赋一个缺

一脸懵逼学习Hive的安装(将sql语句翻译成MapReduce程序的一个工具)

Hive只在一个节点上安装即可: 1.上传tar包:这个上传就不贴图了,贴一下上传后的,看一下虚拟机吧: 2.解压操作: [root@slaver3 hadoop]# tar -zxvf hive-0.12.0.tar.gz 解压后贴一下图:  3:解压缩以后启动一下hive:  4:开始操作sql: 好吧,开始没有启动集群,输入mysql创建数据库命令,直接不屌我,我也是苦苦等待啊: 5:启动我的集群,如下所示,这里最后帖一遍部署以后集群关了,重新开启集群的步骤,不能按照部署集群的时候进行格式

oracle 根据树形结构查询一级,二级报表sql 优化问题

问题描述 问题是:当出现数据量特别大的时候,sql该如何优化,谢谢.select t.cate_1_id, max(t.supplier_count), max(t.supplier_t_count), max(t.supplier_a_count), max(t_rate), max(a_rate), max(t.vcode_count), max(vcode_rate), max(t.supplier_l_count), max(l_rate), max(t.supplier_b_count