找出谁在每个位置获得最高薪水

时间:2013-11-03 17:44:34

标签: sql oracle oracle10g greatest-n-per-group

我有两张表如下:

employ_offical:

id  name   salary
1   raj    5000
2   ram    8000
3   balu   3000
4   david  4000

员工个人:

name   location
raj      india
ram      china
balu     india
david    china

从这两张表中,我需要知道如何检索谁在每个地方获得最高薪水;在一个地方,一个人应属于这一类别。

如何检索谁在每个地方获得最高薪水?

2 个答案:

答案 0 :(得分:1)

以下是解决此问题的一种方法:

select p.location, p.name, o.salary
  from employ_offical o,
       employee_personal p
 where o.name = p.name
   and o.salary = (
       select max(o2.salary)
         from employ_offical o2,
              employee_personal p2
        where o2.name = p2.name
          and p2.location = p.location);

有一个SQL小提琴here

请注意我在这里加入了名称,因为它是唯一可用的连接,但从设计的角度来看,在两个表中都有id并加入id会好得多。

答案 1 :(得分:0)

这应该有效:

SELECT eo.name, ep.location, eo.salary 
FROM employ_offical eo
INNER JOIN employee_personal ep ON eo.name = ep.name
WHERE eo.salary = (SELECT MAX(salary) 
                   FROM employ_offical eo1 
                   INNER JOIN employee_personal ep1 ON eo1.name=ep1.name 
                   WHERE ep.location = ep1.location                        
                   )

虽然这可能不是最有效或最漂亮的方式。

请注意,如果同一位置的多个人共享该位置的最高工资,则此查询将返回所有这些。