场景:

说明.1.上面的数据是经过规整的数据,step是连续的,这个可以通过row_number实现.连续是必要的一个条件因为在计算第二个查询条件时依赖这个顺序,如果step不是数字字段可以截取然后转为数字

1、查询每一步骤相对于路径起点人数的比例

2、查询每一步骤相对于上一步骤的漏出率

说明1.step=1时为起点.

2.以上需求是要在hive中实现的,但是么有数据就就再mysql中实现,sql大致一样

3.sql在mysql下测试都是通过的

| CREATE TABLE `step1` (
`id` int(11) DEFAULT NULL,
`numbs` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
select a.id,a.numbs ,a.numbs/(select c.numbs from step1 c where c.id = (select min(id) from step1 b) ),a.numbs/d.numbs from step1 a left join step1 d on d.id  = a.id -1
order by a.id asc

思路:1.求出第一步

select c.numbs from step1 c where c.id = (select min(id) from step1 b),
2求出上一步
left join step1 d on d.id  = a.id -1
order by a.id asc

第二种实现
select  a.id as step,a.numbs ,a.numbs/z.numbs , a.numbs/c.numbs   from step1 a
inner join (select y.minid, x.numbs from (select min(id) minid from step1 b) y join step1 x on x.id = y.minid) z
left join step1 c on a.id-1 = c.id group by a.id asc;

由"查询每一步骤相对于路径起点人数的比例"可知,每一行的数据都要和起点行的数据相除.那么,就是每一行都要有起点行的数据,此时当数据表有多行,起始数据只有一行时,他们再inner join一下,就达到目的了

之后再进行相除就很简单了

场景2 : 求每月的访问量,截止到当月的每个用户的总访问量

可能适用的一个场景,之前在工作中遇到需求,就是要对一个数据进行累加,累加是按月的,比如,1月31日统计之后1月就停止统计,然后将1月31日的值继续计算2月的.这样一直计算,到每个月的最后一天这个月的统计就结束.

解决方法,级联求和,二次求和,第一次已经聚合了,第二次聚合时使用max函数,或者min函数对上次的数据进行一次"聚合"因为第一次已经聚合过了,这一列只有一个值,所以聚合之后还是一样的结果.

数据

A    2015-01    5
A 2015-01 15
B 2015-01 5
A 2015-01 8
B 2015-01 25
A 2015-01 5
A 2015-02 4
A 2015-02 6
B 2015-02 10
B 2015-02 5
 CREATE TABLE `t_access` (
`vistor` varchar(255) DEFAULT NULL,
`ymonth` varchar(255) DEFAULT NULL,
`vistTimes` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

结果:

select A.vistor,A.ymonth,max(A.vistTimes) as vistTimes,sum(B.vistTimes) as accumulate
from
(select vistor,ymonth,sum(vistTimes) as vistTimes from t_access group by vistor,ymonth) A
inner join
(select vistor,ymonth,sum(vistTimes) as vistTimes from t_access group by vistor,ymonth) B
on
A.vistor=B.vistor
where B.ymonth <= A.ymonth
group by A.vistor,A.ymonth
order by A.vistor,A.ymonth; select * from t_access;
select aa.vistor,aa.ymonth ,max(aa.sumvistTimes),sum(b.sumvistTimes)
from (select a.vistor,a.ymonth ,SUM(a.vistTimes) as sumvistTimes from t_access a group by a.vistor,a.ymonth ) aa
left join
(select m.vistor,m.ymonth ,SUM(m.vistTimes) as sumvistTimes from t_access m group by m.vistor,m.ymonth )
b on b.vistor = aa.vistor where aa.ymonth >= b.ymonth GROUP BY aa.vistor,aa.ymonth

总结,上面的两个场景都用到了inner join ,尤其在第一种实现时,感觉提高了查询性能,(没有测试过).hive只支持等值的join

mysql hive sql 进阶的更多相关文章

  1. mysql基础sql进阶

    回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...

  2. MySQL:SQL进阶

    一.数据库相关理论 1.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_s ...

  3. MySQL高级(进阶)SQL语句

    MySQL高级(进阶)SQL语句 目录 MySQL高级(进阶)SQL语句 一.实例准备--制表 1. 表1(商店区域表) 2. 表2(商店销售表) 3. 表3(城市表) 4. 表4(total_sal ...

  4. Hive sql 语法解读

    一. 创建表 在官方的wiki里,example是这种: Sql代码   CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name d ...

  5. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  6. mysql入门与进阶

    MySQL入门与进阶 需求:对一张表中的数据进行增删改查操作(CURD) C:create 创建 U:update 修改 R:read 读|检索 查询 D:delete 删除涉及技术:数据库 1.数据 ...

  7. mysql之SQL入门与提升(二)

    在mysql之SQL入门与提升(一)我们已经有了些许基础,今天继续深化 先造表 SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0; -- -------------- ...

  8. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

  9. Hive SQL之分区表与分桶表

    Hive sql是Hive 用户使用Hive的主要工具.Hive SQL是类似于ANSI SQL标准的SQL语言,但是两者有不完全相同.Hive SQL和Mysql的SQL方言最为接近,但是两者之间也 ...

随机推荐

  1. linux 监控性能学习笔记(1)

    top命令中的 load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况. 在单核系统中100%利用负载标识为1.00,双核系统标识2.00 四核系统标识为4.00 因 ...

  2. 微信小程序 confirm(删除提示)提示框,询问框,小程序操作成功提示后跳转

    微信小程序删除处理 没有 confrim 那怎么实现这个效果呢 可以使用小程序里的模态框 代码: wx.showModal({ title: '提示', content: '确定要删除吗?', suc ...

  3. logstash 如何处理 mongodb 导出来的 _id value数据。 how to custom fields of logstash by mongo mapreduce exported data.(example format: {_id:"xxx"} , value:{})

    input { file { path => "c:\aa.json" start_position => "beginning" #sincedb ...

  4. 配置并使用Android支持的库

    原文链接:http://android.eoe.cn/topic/android_sdk Android Support Library(支持库)提供了包含一个API库的JAR文件,当你的应用运行在A ...

  5. [CTCI] 最大子方阵

    最大子方阵 题目描述 有一个方阵,其中每个单元(像素)非黑即白(非0即1),请设计一个高效算法,找到四条边颜色相同的最大子方阵. 给定一个01方阵mat,同时给定方阵的边长n,请返回最大子方阵的边长. ...

  6. iOS基础总结

    面试题预览: 1.KVO实现原理? 2.说说你理解的埋点? 3.消息转发机制原理? 4.说说你理解weak属性? 5.假如Controller太臃肿,如何优化? 6.项目中网络层如何做安全处理? 7. ...

  7. HTML框架标签的使用-&lt;frameset&gt;

    <html> <head> <title> frameset框架的使用-使用frameset框架进行布局 </title> <!-- 标签名称:f ...

  8. APACHE LOG4J™ 2

    最近服务端开发需要用Log系统,于是研究了下APACHE下的Log框架. 目前日志系统,支持的语言有C++,PHP,.NET,JAVA.当然我是用Java服务端,选择用log4j吧.但突然发现log4 ...

  9. 腾讯云服务器 安装fastdfs文件服务器

    上篇安装完nginx后,那么这次咱们就来安装fastdfs文件服务器,为何要使用文件服务器,这里不多说了,以前的文章有写过 首先用ftp工具把fastdfs的相关文件上传至腾讯云,如下 首先,安装基本 ...

  10. ios开发中的一些小技巧

    1.如果在程序中想对某张图片进行处理的话(得到某张图片的一部分)可一用以下代码:   UIImage *image = [UIImage imageNamed:filename]; CGImageRe ...