hive> select * from app_data_stats_historical where os='1' group by dt limit 100;
出现结果如下:
2014-01-01
2014-01-06
......
2014-02-07
2014-02-10
2014-02-14
2014-02-17
2014-02-24
(只返回了一列日期。说明* 不起作用。不过这样,可以查看总共哪些日期,有效,存在数据)
加上having命令,having只作用于group by中的字段,非group的字段不行:
select * from app_data_stats_historical where os='1' group by dt having dt>' limit 1002014-02-01' limit 100;
2014-02-03
2014-02-04
2014-02-07
2014-02-10
2014-02-14
2014-02-17
2014-02-24
(可以用日期进行比较。)
 
hive> select * from app_data_stats_historical where os='1' order by dt desc limit 100;
字段是全部返回的。降序。
 group by 多个字段:2周内分联盟(5是多盟)分平台(分平台指的是分ios和android),分时段的曝光及点击。
select substr(createtime,12,2)hour,logtype,os_id,count(distinct logtype)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'and adn=5
group by substr(createtime,12,2), logtype, os_id;
注意,时段hour提取函数substr和substring 是通用的!
 
或者分步做:将group的字段按取值加到where中去(os_id取值1是android,2是iOS):
select substr(createtime,12,2)hour,logtype,count(*)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'and os_id='2' and adn=5
group by substr(createtime,12,2), logtype;
以及:
select substr(createtime,12,2),logtype,count(*)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'and os_id='1' and adn=5
group by substr(createtime,12,2), logtype;
 
substr(createtime,12,2)提取小时字段,起hour别名,group by 不支持。
group 里面不能起别名hour,直接用或引用都不行。
(1)Group by定义别名hour,报错,解析错误
selectsubstr(createtime,12,2),logtype,count(*)
from wizad_mdm_raw_hdfs
where day >= '2014-12-01'
group by substr(createtime,12,2) hour,logtype;
 
(2)引用定义的hour别名也不行: Line 4:9 Invalid table alias or column reference 'hour'
select substr(createtime,12,2)hour,logtype,count(*)
from wizad_mdm_raw_hdfs
where day >= '2014-12-01'
group by hour, logtype;
 
 
 
hive wiki上说group by有两种使用情况限制
(1)group by只有一列,则distinct只能作用一列(可以多次作用同一列)
 INSERT OVERWRITE TABLE pv_gender_sum
 SELECT pv_users.gender, count (DISTINCT pv_users.userid)
 FROM pv_users
 GROUP BY pv_users.gender;
 
 像这样 SELECTpv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCTpv_users.userid)
 只distinct一列,但出现多次是可以的。
下面的查询错误,不允许DISTINCT多个列
 INSERT OVERWRITE TABLE pv_gender_agg
 SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCTpv_users.ip)
 FROM pv_users
 GROUP BY pv_users.gender;
但我测试发现是可以的。有大神可以给我解释么?
 

group by统计去重distinct个数
select substr(createtime,12,2)hour,logtype,os_id,count(distinct logtype), count(distinct os_id)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'and adn=5
group by substr(createtime,12,2), logtype, os_id;
 
 
或者一些测试脚本都说明了,我们
select logtype, count(distinct os_id),count(distinctip),count(distinct id)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'
group by logtype;
结果:
1      2       8493314 77579300
2      2       267685  211119
 
select substr(createtime,12,2) hour, count(distinctid),count(distinct ip)
from wizad_mdm_raw_hdfs
where ad_id in('19057','19058','812b4ba287f5ee0bc9d43bbf5bbe87fb') and day >= '2014-12-01'and adn=5
group by substr(createtime,12,2);
                                                     
部分结果如下:
00     1598136 154053
04     989745  51201
……
18     1711493 201436
21     3644241 374243
 
 
(2)另一个wiki限制说明:group by后,除了作用列和聚合函数统计项,多余列不能存在。
这个我验证过确实是不行的。
SELECT a,sum(b)
FROM t1
GROUP BY a;
是正确的
 
下面是错误的。
SELECT a,b
FROM t1
GROUP BY a;
因为有多余列b,其不在group by的字段属性,(且不是聚合函数).
查询结果会是这样
a   b
------
100 1
100 2
100 3
gourp by a后,b不能成为集合{1,2,3}返回,你可以count,但不能直接返回b。b是多值的。hive摒弃了这种猜测无效的SQL(HQL,要准确):有一列在select子句中,却不包含在GROUPBY子句中。
pig是可以构成集合返回的。
 
 

hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证的更多相关文章

  1. SQL的GROUP BY 与 Order By

    1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...

  2. hive的高级查询(group by、 order by、 join 、 distribute by、sort by、 clusrer by、 union all等)

    查询操作 group by. order by. join . distribute by. sort by. clusrer by. union all 底层的实现 mapreduce 常见的聚合操 ...

  3. hive的strict模式;where,group by,having,order by同时使用的执行顺序

    主要限制三种情况 (1) 有partition的表查询需要加上where子句,筛选部分数据实现分区裁剪,即不允许全表全分区扫描,防止数据过大 (2) order by 执行时只产生一个reduce,必 ...

  4. 深度分析mysql GROUP BY 与 ORDER BY

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQLi ...

  5. mysql GROUP BY 与 ORDER BY 查询不是最新记录

    转载:http://blog.csdn.net/qvbfndcwy/article/details/7200910 鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,( ...

  6. mysql “group by ”与"order by"的研究--分类中最新的内容

    这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from ...

  7. select的5中子句where,group by, havaing, order by, limit的使用顺序及实例

    -- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...

  8. GROUP BY和ORDER BY共用

    SELECT BatchNumber,MAX(Id) FROM dbo.SceneryOrder AND BatchNumber<>'' GROUP BY BatchNumber DESC

  9. 查询语句中select from where group by having order by的执行顺序

    查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--w ...

随机推荐

  1. AFNetworking详解和相关文章链接

    写在开头: 作为一个iOS开发,也许你不知道NSUrlRequest.不知道NSUrlConnection.也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定 ...

  2. Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)

    概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...

  3. Team Foundation Server 2015 Update 2.1 发布日志

    微软在 2016年5月5日发布了Visual Studio Team Foundation Server 2015 update 2.1. 下面我们来看看Update2.1中给我们带来了哪些新功能. ...

  4. 如何将Ubuntu部署到U盘中,用U盘安装linux操作系统

    http://jingyan.baidu.com/article/d5c4b52be79960da560dc59f.html 用U盘装一个linux系统是非常简单的事情,不会就看看这篇文章吧,后期我会 ...

  5. cocos2d-x 3.11 游戏开发环境搭建流程

    cocos2d-x 3.11.1 游戏开发环境搭建流程 1. 准备下面的软件 1) Windows7 64Bit+ VS2013 (VC++) 这个不用多说. 2) cocos2d-x-3.11.1. ...

  6. linux qcom LCD framwork

    点击打开链接 0.关键字 MDSS : Multimedia Display sub system DSI: Display Serial Interface 1.涉及文件 (1) drivers\v ...

  7. Nginx Upstream模块源码分析(上)

    Upstream模块是一个很重要的模块,很多其他模块都会使用它来完成对后端服务器的访问, 达到反向代理和负载均衡的效果.例如Fastcgi.Memcached.SessionSticky等. 如果自己 ...

  8. 【一天一道LeetCode】#137. Single Number II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  9. SpringMVC源码分析--容器初始化(四)FrameworkServlet

    在上一篇博客SpringMVC源码分析--容器初始化(三)HttpServletBean我们介绍了HttpServletBean的init函数,其主要作用是初始化了一下SpringMVC配置文件的地址 ...

  10. ORACLE ORA-01653: unable to extend table 的错误

    ORACLE ORA-01653: unable to extend table 的错误 今天用PL SQL Developer往oracle数据库中导入数据时,突然报错,只能终止,错误的具体内容如下 ...