举个例子,求各部门工资和总工资的比例
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什么时候可以用别名?相关推荐

  1. Hive order by后面跟别名,where/ group by/ partition by后面要么跟原字段名,要么跟表达式。

    order by后面跟别名(跟原字段名也行,不可跟表达式),where/ group by 后面要么跟原字段名,要么跟表达式. 1 字段别名,没有使用函数 selec c1 as c2 ...... ...

  2. 行进中换轮胎——万字长文解析美团和大众点评两大数据平台是怎么融合的

    点击上方"公众号"可以订阅哦 本文根据作者在2017年ArchSummit的分享记录整理而成. 背景 互联网格局复杂多变,大规模的企业合并重组不时发生.原来完全独立甚至相互竞争的两 ...

  3. 美团数据平台融合实践

    本文根据作者在2017年ArchSummit的分享记录整理而成. 互联网格局复杂多变,大规模的企业合并重组不时发生.原来完全独立甚至相互竞争的两家公司,有着独立的技术体系.平台和团队,如何整合,技术和 ...

  4. 史上最详细大数据基础知识

    # **1___Hive** ## 0.0.hive基本命令 ```sql [1.分区表] --创建分区 alter table table_name add partition(分区字段='分区值' ...

  5. Hive group by后面不能用列别名

    比如,如下是会报错的,year这个别名此时还是不能用的 select deptno `dept`,year(hiredate) `year`,sum(sal) from tb_emp group by ...

  6. 为什么Hive中的group by后面不能使用字段别名?

    为什么Hive中的group by后面不能使用字段别名呢?看了这篇文章你将一目了然. 文章目录 1. 案例说明 2. 分析原因 3. 解决办法 4. 执行效率 5. 总结 1. 案例说明 我们以一个例 ...

  7. Hive中表名、别名的限制

    测试场景 表名 表别名 列名/列别名 列别名为_ × × × 列别名仅包含数字 × × × 列别名以下划线开头 × × × 列别名仅包含数字和下划线,且以数字开头,如1_ √ √ √ 长度超过128 ...

  8. 2021年大数据Hive(四):Hive查询语法

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...

  9. mysql 什么不能用别名_[转]为何group by后面不能使用别名(除MySQL)

    同事工做中遇到一个问题:mysql select   count(billingdate),to_char(billingdate,'YYYYmm') monthsql from tu_tradeor ...

最新文章

  1. python的基本语句_Python的基本语句
  2. mysql 去重 根据id_超详细的四类数据库去重实现方案汇总,值得收藏
  3. 第二次做HDOJ 1051
  4. web前端技巧-ES6新特性与重点知识汇总(二)
  5. 从0到1,从概念到国际标准,蚂蚁共享智能凭什么?
  6. mysql keepalived双主双活_mysql高可用架构方案之中的一个(keepalived+主主双活)
  7. jdbc c3p0 mysql_JDBC + MySQL使用c3p0连接池
  8. 计蒜客:区间整数操作-区间更新-区间和
  9. 文件转Base64格式
  10. Android MediaProjection截屏与录屏(ScreenCapture Library 的使用)(二)
  11. 分享几个手机和电脑上的百宝箱工具
  12. 开源Java(JSP) CMS系统源码推荐
  13. 高端存储“四十不惑”
  14. ubuntu邮件服务器,Ubuntu下搭建mail邮件服务器的方法教程
  15. UDS(一)入门概述
  16. 地图SDK全面升级 – 数十项新功能及优化等你来体验
  17. div p、divp、div+p、div~p、div.a 、p,span的用法和区别
  18. sqlalchemy下连接MYSQL出现的错误:This session is in ‘prepared‘ state; no further SQL can be emitted ...
  19. 到底无支付牌照的电商公司能开展什么样的业务!!
  20. 名帖69 颜真卿 楷书《自书告身帖》

热门文章

  1. springmvc06 静态资源
  2. 下载和安装CUDA和Cudnn(图文详解)
  3. 目前人们把通用计算机,计算机与信息社会基础知识测试题.doc
  4. 实验1 java程序基础_《Java程序设计》实验1
  5. python 与_Python基础 第一个 Python 程序
  6. matlab求非圆齿轮的节曲线,基于MATLAB的非圆齿轮节曲线设计
  7. java widget_自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组
  8. cocos2dx mysql_初次接触cocos2dx
  9. win+shift+s截图保存在哪_今天才发现,原来不使用工具,电脑也能快速截图,你用过哪些?...
  10. python framework jdon_python – Django Rest Framework和JSONField