postgresql/hive中函数学习

目前postgresql中的部分函数在hive中也是存在的,所以今天就以postgresql为例来进行说明,这个过程同时可以应用到hive中。

1、创建表

CREATETABLEemployee(
empidINT,deptidINT,salaryDECIMAL(10,2)
);

2、导入数据

INSERTINTOemployeeVALUES(1,10,5500.00);
INSERTINTOemployeeVALUES(2,4500.00);
INSERTINTOemployeeVALUES(3,20,1900.00);
INSERTINTOemployeeVALUES(4,4800.00);
INSERTINTOemployeeVALUES(6,40,14500.00);
INSERTINTOemployeeVALUES(7,44500.00);
INSERTINTOemployeeVALUES(10,44500.00);
INSERTINTOemployeeVALUES(11,44501.00);
INSERTINTOemployeeVALUES(8,50,6500.00);
INSERTINTOemployeeVALUES(9,7500.00);

3、应用

--每个部门工资最高的
select*from(
selecte.*,row_number()over(partitionbye.deptidorderbye.salarydesc)rankfromemployeee
)ee
whereee.rank=1;


--应该用rank,对于工资相同的应该都显示出来
select*from(
selecte.*,rank()over(partitionbye.deptidorderbye.salarydesc)rankfromemployeee
)ee
whereee.rank=1;


--rank和dense_rank的区别就是前者占位,后者不占位
--ntile可以看作是把有序的数据集合平均分配到expr指定的数量的桶中,将桶号分配给每一行。
--如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的行数最多相差1。
select
e.*,ntile(3)over(partitionbye.deptidorderbye.salarydesc)ntile,rank()over(partitionbye.deptidorderbye.salarydesc)rank,dense_rank()over(partitionbye.deptidorderbye.salarydesc)drank,row_number()over(partitionbye.deptidorderbye.salarydesc)rownum,first_value(salary)over(partitionbye.deptidorderbye.salarydesc)fv,last_value(salary)over(partitionbye.deptidorderbye.salaryasc)lvfromemployeee


好了,就这些了,通过例子能很清楚的看到各个函数的应用

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...