2016-03-24 9 views
1

SQLを実行するには、給与が部門の中で最大の従業員の名前を取得する必要があります。しかし、どの部門でも最高給与の雇用主が複数ある場合は、その部門を考慮する必要はありません。重複のないSQLの選択行

私たちは最初の部分を持っていますが、2番目の部分はありません(同じ部署(20)に同じ最高給与(3,000)を持つ従業員が2人いるため)。

これは、私たちがやったことです:

SQL> SELECT ename, sal, deptno FROM emp a 
    WHERE sal >= ALL (SELECT sal FROM emp WHERE deptno=a.deptno) 
    ORDER BY sal; 

そしてこれは、私たちが得たものである:

ENAME   SAL DEPTNO 
---------- ------- ------ 
BLAKE  2,850  30 
FORD   3,000  20 
SCOTT  3,000  20 
KING   5,000  10 

4 filas seleccionadas. 

すべてのヘルプは有用であろう、ありがとう!

+0

ただチェックしてください。どのRDBMSですか?どのデータ型がsalですか? – Strawberry

+0

RDBMSはOracleです(以前は書いていなかった)。salは整数データ型@Strawberry –

答えて

0
SELECT ename, sal, deptno 
FROM emp a 
WHERE not exists (
    SELECT * 
    FROM emp 
    WHERE deptno=a.deptno 
    and sal >= a.sal 
    and ename != a.ename) 
ORDER BY sal; 
+0

これは私たちが必要としていたものです。ありがとう!:) –

0
with cte as 
( SELECT ename, sal, deptno 
     , row_number() over (partition by deptno order by sal desc) as rn 
     FROM emp 
) 
select ename, sal, deptno from cte where rn = 1 
except 
select ename, sal, deptno from cte where rn = 2 
order by sal 

これは、Oracleで動作しない場合 - それはまた、MSSQL

+0

ありがとう、ありがとう! –

-5

をタグ付けするために使用されることは重複せず、レコードが表示されます、GROUP BY column_name`を使用するようにしてください。

0

あなたは、いくつかのanalytic functionsに必要なものを持つことができます。給料で

select ename, 
     deptno, 
     sal 
from (
     select ename, 
      deptno, 
      sal, 
      row_number() over(partition by deptno order by sal desc) AS num, 
      count(1) over(partition by deptno, sal) AS count 
     from emp 
    ) 
where num = 1 
    and count = 1 

内部クエリの注文と同じ部署で同じ給与と従業員の数をカウントし、外部の人は、最大給与を持つ従業員を単にフィルタリングします。この部門では、1人の従業員だけがその給与を受け取ります。異なるアプローチで

、単にあなたのクエリを変更し、あなたが試すことができます:

SELECT ename, sal, deptno FROM emp a 
    WHERE sal >= ALL (SELECT sal FROM emp WHERE deptno=a.deptno) 
     and (select count(1) from emp b where a.deptno = b.deptno and a.sal = b.sal) = 1 

最初の方法は、単一テーブルスキャンで、より優れたパフォーマンスを提供します、二番目は、ネストされたクエリを必要としながら、これより少ないもの効率的

+0

私たちの問題については、2度目の選択が最高です。なぜなら、私たちはその時までに効率性の面で多くの注意を払うことなく学んでいるからです。しかし、説明に感謝します! –

関連する問題