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

TOPNとBOTTOMNを選択します

    この問題を解決する最善の方法は、Oracleのバージョンに一部依存します。これは、match_recognizeを使用した非常に単純な(そして、おそらく非常に効率的な)ソリューションです。 バージョン12.1で追加された句。

    EMPLOYEESを使用して説明します 標準のHRのテーブル スキーマ、SALARYによる順序付け 。ここでの唯一のトリックは、上と下の5行を選択し、その間のすべてを無視することです。それ(「無視する」)は{- ... -} 演算子はpatternで行います 副節。

    select employee_id, first_name, last_name, salary
    from   hr.employees
    match_recognize(
      order by salary desc
      all rows per match
      pattern ( a{5} {- a* -} a{5} )
      define a as 0 = 0             -- For reasons known only to Oracle, DEFINE is required.
    );
    
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                     SALARY
    ----------- -------------------- ------------------------- ----------
            100 Steven               King                           24000
            101 Neena                Kochhar                        17000
            102 Lex                  De Haan                        17000
            145 John                 Russell                        14000
            146 Karen                Partners                       13500
            135 Ki                   Gee                             2400
            127 James                Landry                          2400
            136 Hazel                Philtanker                      2200
            128 Steven               Markle                          2200
            132 TJ                   Olson                           2100
    


    1. MySql-最初に文字列値で並べ替え

    2. 低い権限を持つPL-SQLを使用してOracleで列データ型を取得するにはどうすればよいですか?

    3. HibernateとOracleシーケンス

    4. mysql-日時とグループで時間を選択します