Hive什么时候可以用别名?
举个例子,求各部门工资和总工资的比例
1 首先求各部门工资以及总工资
select deptno,sum(sal) over (distribute by deptno) `d_dal`,sum(sal) over() `total_sal`
from tb_emp;
2 求比例
如下写法是错误的,此时还不能用别名
select deptno,sum(sal) over (distribute by deptno) `d_sal`,sum(sal) over() `total_sal`,d_sal/total_sal
from tb_emp;
想要用别名,必须嵌套一层,如下是可以的,因为相当于子查询保存起来,后面就可以用了
with a as (select deptno,sum(sal) over (distribute by deptno) `d_sal`,sum(sal) over () `total_sal`from tb_emp)
select deptno,d_sal,total_sal,round(d_sal / total_sal, 2) `per`
from a
;+------+-----+---------+----+
|deptno|d_sal|total_sal|per |
+------+-----+---------+----+
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|10 |8750 |29025 |0.3 |
|10 |8750 |29025 |0.3 |
|10 |8750 |29025 |0.3 |
|NULL |NULL |29025 |NULL|
+------+-----+---------+----+
如果不想嵌套,可以如下,就是不能用别名,但是这样的话 sum(sal) over()会不会计算两次,影响效率呢?
测试一下,如下sql用时30 s 279 ms
,上面用别名的耗时 33 s 612 ms
,可以看出并不影响效率
select deptno,sum(sal) over (distribute by deptno) `d_sal`,sum(sal) over() `total_sal`,round((sum(sal) over (distribute by deptno))/(sum(sal) over()),2) `per`
from tb_emp;
;
+------+-----+---------+----+
|deptno|d_sal|total_sal|per |
+------+-----+---------+----+
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|30 |9400 |29025 |0.32|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|20 |10875|29025 |0.37|
|10 |8750 |29025 |0.3 |
|10 |8750 |29025 |0.3 |
|10 |8750 |29025 |0.3 |
|NULL |NULL |29025 |NULL|
+------+-----+---------+----+
总结
- 此种情形要么别名+嵌套,要么不嵌套,但是也不能用别名!
Hive什么时候可以用别名?相关推荐
- Hive order by后面跟别名,where/ group by/ partition by后面要么跟原字段名,要么跟表达式。
order by后面跟别名(跟原字段名也行,不可跟表达式),where/ group by 后面要么跟原字段名,要么跟表达式. 1 字段别名,没有使用函数 selec c1 as c2 ...... ...
- 行进中换轮胎——万字长文解析美团和大众点评两大数据平台是怎么融合的
点击上方"公众号"可以订阅哦 本文根据作者在2017年ArchSummit的分享记录整理而成. 背景 互联网格局复杂多变,大规模的企业合并重组不时发生.原来完全独立甚至相互竞争的两 ...
- 美团数据平台融合实践
本文根据作者在2017年ArchSummit的分享记录整理而成. 互联网格局复杂多变,大规模的企业合并重组不时发生.原来完全独立甚至相互竞争的两家公司,有着独立的技术体系.平台和团队,如何整合,技术和 ...
- 史上最详细大数据基础知识
# **1___Hive** ## 0.0.hive基本命令 ```sql [1.分区表] --创建分区 alter table table_name add partition(分区字段='分区值' ...
- Hive group by后面不能用列别名
比如,如下是会报错的,year这个别名此时还是不能用的 select deptno `dept`,year(hiredate) `year`,sum(sal) from tb_emp group by ...
- 为什么Hive中的group by后面不能使用字段别名?
为什么Hive中的group by后面不能使用字段别名呢?看了这篇文章你将一目了然. 文章目录 1. 案例说明 2. 分析原因 3. 解决办法 4. 执行效率 5. 总结 1. 案例说明 我们以一个例 ...
- Hive中表名、别名的限制
测试场景 表名 表别名 列名/列别名 列别名为_ × × × 列别名仅包含数字 × × × 列别名以下划线开头 × × × 列别名仅包含数字和下划线,且以数字开头,如1_ √ √ √ 长度超过128 ...
- 2021年大数据Hive(四):Hive查询语法
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...
- mysql 什么不能用别名_[转]为何group by后面不能使用别名(除MySQL)
同事工做中遇到一个问题:mysql select count(billingdate),to_char(billingdate,'YYYYmm') monthsql from tu_tradeor ...
最新文章
- python的基本语句_Python的基本语句
- mysql 去重 根据id_超详细的四类数据库去重实现方案汇总,值得收藏
- 第二次做HDOJ 1051
- web前端技巧-ES6新特性与重点知识汇总(二)
- 从0到1,从概念到国际标准,蚂蚁共享智能凭什么?
- mysql keepalived双主双活_mysql高可用架构方案之中的一个(keepalived+主主双活)
- jdbc c3p0 mysql_JDBC + MySQL使用c3p0连接池
- 计蒜客:区间整数操作-区间更新-区间和
- 文件转Base64格式
- Android MediaProjection截屏与录屏(ScreenCapture Library 的使用)(二)
- 分享几个手机和电脑上的百宝箱工具
- 开源Java(JSP) CMS系统源码推荐
- 高端存储“四十不惑”
- ubuntu邮件服务器,Ubuntu下搭建mail邮件服务器的方法教程
- UDS(一)入门概述
- 地图SDK全面升级 – 数十项新功能及优化等你来体验
- div p、divp、div+p、div~p、div.a 、p,span的用法和区别
- sqlalchemy下连接MYSQL出现的错误:This session is in ‘prepared‘ state; no further SQL can be emitted ...
- 到底无支付牌照的电商公司能开展什么样的业务!!
- 名帖69 颜真卿 楷书《自书告身帖》
热门文章
- springmvc06 静态资源
- 下载和安装CUDA和Cudnn(图文详解)
- 目前人们把通用计算机,计算机与信息社会基础知识测试题.doc
- 实验1 java程序基础_《Java程序设计》实验1
- python 与_Python基础 第一个 Python 程序
- matlab求非圆齿轮的节曲线,基于MATLAB的非圆齿轮节曲线设计
- java widget_自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组
- cocos2dx mysql_初次接触cocos2dx
- win+shift+s截图保存在哪_今天才发现,原来不使用工具,电脑也能快速截图,你用过哪些?...
- python framework jdon_python – Django Rest Framework和JSONField