sql >> Databáze >  >> RDS >> Oracle

Oracle SQL - Jak získat nejvyšších 5 hodnot sloupce

Nejlepší způsob, jak toho dosáhnout, je pomocí analytických funkcí, RANK() nebo DENSE_RANK() ...

SQL> select * from (
  2        select empno
  3               , sal
  4               , rank() over (order by sal desc) as rnk
  5        from emp)
  6  where rnk <= 5
  7  /

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          4
      8083       2850          5
      7698       2850          5

6 rows selected.

SQL>

DENSE_RANK() komprimuje mezery, když je shoda:

SQL> select * from (
  2        select empno
  3               , sal
  4               , dense_rank() over (order by sal desc) as rnk
  5        from emp)
  6  where rnk <= 5
  7  /

     EMPNO        SAL        RNK
---------- ---------- ----------
      7839       5000          1
      7788       3000          2
      7902       3000          2
      7566       2975          3
      8083       2850          4
      7698       2850          4
      8070       2500          5

7 rows selected.

SQL>

Jaké chování preferujete, závisí na vašich obchodních požadavcích.

Existuje také analytická funkce ROW_NUMBER(), kterou můžeme použít k vrácení přesného počtu řádků. Měli bychom se však vyvarovat používání řešení založených na čísle řádku, pokud obchodní logika nechce libovolně zkrátit sadu výsledků v případě nerozhodného výsledku. Je rozdíl požadovat pět nejvyšších hodnot a prvních pět záznamů seřazených podle vysokých hodnot

Existuje také neanalytické řešení využívající pseudosloupec ROWNUM. To je neohrabané, protože ROWNUM je použito před klauzulí ORDER BY, což může vést k neočekávaným výsledkům. Málokdy existuje důvod používat ROWNUM místo ROW_NUMBER() nebo některou z hodnotících funkcí.



  1. Spustit uloženou proceduru v SQL Developer?

  2. Počítání DISTINCT ve více sloupcích

  3. Parametrizujte klauzuli SQL IN

  4. Návrh datového modelu pro systém rezervace hotelových pokojů