sql >> データベース >  >> RDS >> Oracle

2番目に高い給料の従業員を見つける方法は?

    これを行う方法は、Oracleの分析関数を使用することです。あなたの特定のシナリオは、私が別のスレッドで提供したソリューションの単なる変形です。

    2番目に高い給与を選択するだけの場合は、DENSE_RANK()、RANK()、ROW_NUMBER()のいずれかでうまくいきます。

    SQL> select * from
      2   ( select sal
      3            , rank() over (order by sal desc) as rnk
      4     from
      5      ( select distinct sal
      6        from emp )
      7    )
      8  where rnk = 2
      9  /
    
           SAL        RNK
    ---------- ----------
          3000          2
    
    SQL> 
    

    ただし、給与が2番目に高い従業員の名前などの追加情報を選択する場合は、選択した関数が結果に影響します。どちらかを選択する主な理由は、同点の場合に何が起こるかです。

    ROW_NUMBER()を使用すると、給与順に並べられた2番目の従業員が返されます。2人の従業員が最高の給与を求めている場合はどうなりますか? 2番目に高い給料を求めて2人の従業員がいる場合はどうなりますか? RANK()を使用していて、2人の従業員が最初の最高の給与を求めている場合、はありません。 RANK=2のレコード。

    これらの場合、DENSE_RANK()を選択するのが通常最も安全な関数であることをお勧めしますが、実際には特定のビジネス要件によって異なります。



    1. MySQLクローンプラグインとXtrabackupの比較

    2. 原因:java.lang.NoSuchMethodError:org.postgresql.core.BaseConnection.getEncoding()Lorg / postgresql / core / Encoding;

    3. PostgreSQLの関数からテーブルタイプを返す

    4. mysqli_fetch_array()を2回使用するにはどうすればよいですか?