Hive 配置单元问题-排名()超过(按部门划分,按顺序,按总和(工资))

Hive 配置单元问题-排名()超过(按部门划分,按顺序,按总和(工资)),hive,Hive,我试图理解如何在ApacheHive中使用rank()over(partitionby),但在获得我想要的结果时遇到了问题 这篇文章的底部是我正在使用的数据集 我想做的是提出一个声明,根据该部门员工的工资总额对各部门进行唯一的排名。然而,我得到的三个部门的排名都是1 希望有人能告诉我哪里出错了!非常感谢!:) 我想要什么 +-----------+--------+-----+ | dept_num | _c1 | rk | +-----------+--------+-----+ |

我试图理解如何在ApacheHive中使用rank()over(partitionby),但在获得我想要的结果时遇到了问题

这篇文章的底部是我正在使用的数据集

我想做的是提出一个声明,根据该部门员工的工资总额对各部门进行唯一的排名。然而,我得到的三个部门的排名都是1

希望有人能告诉我哪里出错了!非常感谢!:)

我想要什么

+-----------+--------+-----+ | dept_num | _c1 | rk | +-----------+--------+-----+ | 1000 | 24900 | 3 | | 1001 | 17400 | 1 | | 1002 | 20500 | 2 | +-----------+--------+-----+ Michael|1000|100|5000|full|2014-01-29 Will|1000|101|4000|full|2013-10-02 Will|1000|101|4000|part|2014-10-02 Steven|1000|102|6400|part|2012-11-03 Lucy|1000|103|5500|full|2010-01-03 Lily|1001|104|5000|part|2014-11-29 Jess|1001|105|6000|part|2014-12-02 Mike|1001|106|6400|part|2013-11-03 Wei|1002|107|7000|part|2010-04-03 Yun|1002|108|5500|full|2014-01-29 Richard|1002|109|8000|full|2013-09-01 +-----------+--------+-----+ |部门编号| c1 | rk| +-----------+--------+-----+ | 1000 | 24900 | 3 | | 1001 | 17400 | 1 | | 1002 | 20500 | 2 | +-----------+--------+-----+ 我得到的

+-----------+--------+-----+ | dept_num | _c1 | rk | +-----------+--------+-----+ | 1000 | 24900 | 1 | | 1001 | 17400 | 1 | | 1002 | 20500 | 1 | +-----------+--------+-----+ SELECT dept_num, sum(salary), rank() OVER (PARTITION BY dept_num ORDER BY sum(salary)) as rk FROM employee_contract GROUP BY dept_num; +-----------+--------+-----+ |部门编号| c1 | rk| +-----------+--------+-----+ | 1000 | 24900 | 1 | | 1001 | 17400 | 1 | | 1002 | 20500 | 1 | +-----------+--------+-----+ 我正在使用的HiveQL语句

+-----------+--------+-----+ | dept_num | _c1 | rk | +-----------+--------+-----+ | 1000 | 24900 | 1 | | 1001 | 17400 | 1 | | 1002 | 20500 | 1 | +-----------+--------+-----+ SELECT dept_num, sum(salary), rank() OVER (PARTITION BY dept_num ORDER BY sum(salary)) as rk FROM employee_contract GROUP BY dept_num; 挑选 部门数量、金额(工资), 排名()超过(按部门划分,按数量排序,按总和(工资))为rk 从雇员合同 按部门编号分组; 我的数据集

+-----------+--------+-----+ | dept_num | _c1 | rk | +-----------+--------+-----+ | 1000 | 24900 | 3 | | 1001 | 17400 | 1 | | 1002 | 20500 | 2 | +-----------+--------+-----+ Michael|1000|100|5000|full|2014-01-29 Will|1000|101|4000|full|2013-10-02 Will|1000|101|4000|part|2014-10-02 Steven|1000|102|6400|part|2012-11-03 Lucy|1000|103|5500|full|2010-01-03 Lily|1001|104|5000|part|2014-11-29 Jess|1001|105|6000|part|2014-12-02 Mike|1001|106|6400|part|2013-11-03 Wei|1002|107|7000|part|2010-04-03 Yun|1002|108|5500|full|2014-01-29 Richard|1002|109|8000|full|2013-09-01 迈克尔| 1000 | 100 | 5000 |满| 2014-01-29 将| 1000 | 101 | 4000 |满| 2013-10-02 将| 1000 | 101 | 4000 |部分| 2014-10-02 史蒂文| 1000 | 102 | 6400 |部分| 2012-11-03 露西| 1000 | 103 | 5500 |满| 2010-01-03 莉莉| 1001 | 104 | 5000 |部分| 2014-11-29 Jess | 1001 | 105 | 6000 |部分| 2014-12-02 迈克| 1001 | 106 | 6400 |部分| 2013-11-03 卫| 1002 | 107 | 7000 |部分| 2010-04-03 云| 1002 | 108 | 5500 |满| 2014-01-29 理查德| 1002 | 109 | 8000 |满| 2013-09-01
尝试下面一个,未经测试,让我们知道你得到了什么

SELECT dept_num,TOTAL_SALARY,
rank() OVER (ORDER BY TOTAL_SALARY) as rk
FROM
(
SELECT
dept_num, sum(salary) as TOTAL_SALARY
FROM employee_contract
GROUP BY dept_num
)SUM_EMP

如果您将
薪资的SUM()更改为通过子查询计算,它是否按预期工作?还是同样的结果?非常感谢!:)是的,它起作用了!:)如果您有时间,可以向我解释为什么我原来的HiveQL不工作,或者更确切地说,我是如何误解分区的工作方式的?非常感谢。分区依据与分组依据相同/等效。如果dept_num相同,HQL查询将给出相同的结果。这里的dept_num对于每一行都是不同的。因此给出rk=1