2016-07-26 5 views
0

empno、ename、sal、deptno、dname、location ....を持つ各部門の最高給与従業員を表示する方法empno、ename、sal、deptno、dname、location、各部門の最高給与従業員を表示します。

select e.empno,e.ename, max(e.Sal),d.Deptno 
    from DEPTNO d 
inner join emp e 
    on d.Deptno = e.DEPTNO 
group by d.DEPTNO; 

Employeeテーブル:
Emp Table

DEPTNO表:
Deptno table

分析関数を使用して
+0

によってパーティションで最大の給与を返すmax_sal? –

答えて

0

が、これは簡単です:

この場合
select e.empno, 
     e.ename, 
     e.sal, 
     d.deptno, 
     d.dname, 
     d.loc 
    from Deptno d 
    join (select e.*, 
       row_number() over (
       partition by e.deptno 
        order by sal desc) as rn 
      from Employee e) e 
    on e.deptno = d.deptno 
    and e.rn = 1 

参加条件はe.rn = 1にが含まれて理由ですので、row_number()機能は、各部門の最高支払った従業員のために1の値を返します。結果をその従業員に限定する。

+0

e。*は何を意味するか..... – Dev

+0

これは、 'e'からすべての列を選択することを意味します。そして 'e'は' Employee'テーブルのエイリアスに過ぎないので、Employeeカラムをすべて選択します。 – sstan

0

これを試してみてください:ここ

select empno,ename,deptno,sal from 
(
    select e.empno,e.ename,d.Deptno,sal,max(sal) over (partition by d.deptno order by null) max_sal from Employee e,Deptno d where e.deptno = d.deptno 
)where sal=max_sal 

が問題だったかの部門

関連する問題