我在一次采访中被问到这个问题(希望你们能帮助我,提前谢谢)。
在Hive,你将如何从员工表中获得最高工资的城市?
003 Amit Delhi India 12000
004 Anil Delhi India 15000
005 Deepak Delhi India 34000
006 Fahed Agra India 45000
007 Ravi Patna India 98777
008 Avinash Punjab India 120000
009 Saajan Punjab India 54000
001 Harit Delhi India 20000
002 Hardy Agra India 20000
试试这个:
SET @rank:=0;
SET @dept:='';
SET @desiredrank=8; --For example.
SELECT ename, rank, salary
FROM
(
SELECT
ename, salary,
@rank:=CASE WHEN @dept=deptid THEN @rank+1 ELSE 1 END AS rank,
@dept:=deptid AS department
FROM employees e
JOIN departments d
ON e.deptid=d.deptid
ORDER BY d.deptid, salary
)
WHERE rank=@desiredrank
基本上,您必须使用两个额外的变量。一个用于模拟分组,另一个用于跟踪排名。完成该查询后,根据所需的排名对其进行筛选。
Select Id , max(salary) from employee group by city;
在这种情况下,每个工资最高的城市都会显示相应的id。