Database
 sql >> Baza danych >  >> RDS >> Database

Jak uszeregować wiersze w partycji w SQL?

Problem:

W zestawie wyników chcesz podzielić rekordy i uszeregować wiersze w każdej partycji, dodając kolejną kolumnę, aby pokazać rangi wierszy w partycji.

Przykład:

Nasza baza danych zawiera tabelę o nazwie magazyn z danymi w następujących kolumnach:id (klucz podstawowy), name , category i price .

id imię kategoria cena
105 Życie na wsi styl życia 1,70
108 Magazyn informacyjny wiadomości 3,35
115 Decybel muzyka 6,50
123 Magazyn perkusyjny muzyka 6,50
145 Zachód słońca styl życia 12.00
155 Świat styl życia 9,50
158 Klawiatura muzyka 8,45

Pogrupujmy czasopisma według kategorii i uszereguj każdą grupę w kolejności malejącej według ceny . Wyświetlaj pozycję w rankingu, nazwę, kategorię i cenę każdego magazynu.

Rozwiązanie:

SELECT  
  category,
  name,
  price,
  RANK() OVER (PARTITION BY category
                    ORDER BY price DESC
                    ) AS price_rank
FROM magazine;

Oto wynik:

kategoria imię cena price_rank
styl życia Zachód słońca 12.00 1
styl życia Świat 9,50 2
styl życia Życie na wsi 1,70 3
muzyka Klawiatura 8,45 1
muzyka Decybel 6,50 2
muzyka Magazyn perkusyjny 6,50 2
wiadomości Magazyn informacyjny 3,35 1

Dyskusja:

Aby podzielić wiersze i uszeregować je według ich pozycji w partycji, użyj funkcji RANK() z klauzulą ​​PARTITION BY.

Funkcja RANK() SQL pozwala nam dodać pozycję rekordu w zestawie wyników lub w każdej partycji. W naszym przykładzie szeregujemy wiersze w ramach partycji.

Klauzula OVER() zawsze występuje po RANK(). OVER() musi zawierać klauzulę ORDER BY. Jeśli zwracasz rangi w ramach partycji, umieść klauzulę PARTITION BY wewnątrz klauzuli OVER(). Po PARTITION BY następuje nazwa wyrażenia lub kolumny; w naszym przykładzie używamy kolumny category (PARTITION BY category ).

Uwaga: Jeśli nie używasz partycji, możesz pominąć PARTITION BY i po prostu umieścić klauzulę ORDER BY w OVER().

Po PARTITION BY umieść ORDER BY, a następnie nazwy kolumn lub wyrażeń sortowania. W naszym przykładzie sortujemy w porządku malejącym według kolumny price (ORDER BY price DESC ). Słowo kluczowe DESC wskazuje malejący porządek sortowania.

W powyższym przykładzie użycie funkcji RANK() z PARTITION BY podzieliło zestaw wyników na oddzielne grupy czasopism według ich kategorii . W każdej grupie wiersze zostały posortowane według ceny a następnie znalazł się w tej grupie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PASS Summit 2013:Sukces w Charlotte

  2. Polecenia TCL w SQL

  3. Model danych dla aplikacji do rezerwacji wizyt lekarskich

  4. Klauzula SQL GROUP BY dla początkujących

  5. Korzystanie z Kreatora wykrywania metadanych