我有一个列id、名称和薪水的表,我想从表中找出最大和最小薪水的第n个数字
Id Name Salary -------------- 1 aa 11111 -------------- 2 bb 77777 ------------- 3 cc 33333 ------------- 4 dd 44444 ------------- 5 ee 99999
6qqygrtg1#
您可以使用limit或rank。使用limit,加载数据,按降序对其排序,以获得顺序中最大的工资。将数据限制为第n条记录。这将为您提供n条记录,其中第n条记录将位于数据集的底部。再次按升序排序,将第n条记录作为最上面的记录,然后再次使用limit来获取最上面的记录。对于最小的记录,请使用类似的步骤。如果按升序排序,请限制到第n条记录,然后再次按降序和limit 1排序。
A = LOAD 'data.txt' USING PigStorage(',') AS (id:int,name:chararray,salary:int); B = ORDER A BY Salary DESC; C = LIMIT B 4; --Note: N = 4 D = ORDER C BY salary ASC; E = LIMIT D 1;
dced5bon2#
在Hive中:第n个最高工资查询:
select id,name,salary from ( select id,name,salary,rank() over(ORDER BY salary DESC)ran from salarytable ) s where ran=1;
输出:
5 ee 99999
第n分钟工资查询:
select id,name,salary from ( select id,name,salary,rank() over(ORDER BY salary ASC)ran from salarytable ) s where ran=4;
4 dd 4444
p、 学生:是的 rank() 的数字将定义此处的第n个值。
rank()
2条答案
按热度按时间6qqygrtg1#
您可以使用limit或rank。使用limit,加载数据,按降序对其排序,以获得顺序中最大的工资。将数据限制为第n条记录。这将为您提供n条记录,其中第n条记录将位于数据集的底部。再次按升序排序,将第n条记录作为最上面的记录,然后再次使用limit来获取最上面的记录。对于最小的记录,请使用类似的步骤。如果按升序排序,请限制到第n条记录,然后再次按降序和limit 1排序。
dced5bon2#
在Hive中:
第n个最高工资
查询:
输出:
第n分钟工资
查询:
输出:
p、 学生:是的
rank()
的数字将定义此处的第n个值。