sql >> Databáze >  >> RDS >> Database

Jak seřadit řádky v oddílu v SQL

Problém:

Ve výsledné sadě byste chtěli rozdělit záznamy a seřadit řádky v rámci každého oddílu a přidat další sloupec pro zobrazení pořadí řádků v rámci oddílu.

Příklad:

Naše databáze obsahuje tabulku s názvem časopis s údaji v následujících sloupcích:id (primární klíč), name , category a price .

id jméno kategorie cena
105 Život na venkově životní styl 1,70
108 Časopis News novinky 3,35
115 Decibel hudba 6,50
123 Drum Magazine hudba 6,50
145 Západ slunce životní styl 12:00
155 Svět životní styl 9,50
158 Klávesnice hudba 8,45

Seskupme časopisy podle kategorie a seřadit každou skupinu v sestupném pořadí podle ceny . Zobrazte pozici v žebříčku, název, kategorii a cenu každého časopisu.

Řešení:

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

Zde je výsledek:

kategorie jméno cena price_rank
životní styl Západ slunce 12:00 1
životní styl Svět 9,50 2
životní styl Život na venkově 1,70 3
hudba Klávesnice 8,45 1
hudba Decibel 6,50 2
hudba Drum Magazine 6,50 2
novinky Časopis News 3,35 1

Diskuse:

Chcete-li rozdělit řádky a seřadit je podle jejich pozice v oddílu, použijte funkci RANK() s klauzulí PARTITION BY.

Funkce SQL RANK() nám umožňuje přidat pozici záznamu v sadě výsledků nebo v rámci každého oddílu. V našem příkladu řadíme řádky v rámci oddílu.

Klauzule OVER() vždy následuje po RANK(). OVER() musí obsahovat klauzuli ORDER BY. Pokud vracíte hodnosti v rámci oddílu, umístěte do klauzule OVER() klauzuli PARTITION BY. PARTITION BY následuje výraz nebo název sloupce; v našem příkladu používáme sloupec category (PARTITION BY category ).

Poznámka: Pokud nepoužíváte oddíly, můžete PARTITION BY vynechat a jednoduše vložit klauzuli ORDER BY do OVER().

Po PARTITION BY zadejte ORDER BY následované názvy třídicích sloupců nebo výrazů. V našem příkladu provádíme řazení v sestupném pořadí podle sloupce price (ORDER BY price DESC ). Klíčové slovo DESC označuje sestupné pořadí řazení.

Ve výše uvedeném příkladu použití RANK() s PARTITION BY rozdělilo sadu výsledků do samostatných skupin časopisů podle jejich kategorie . U každé skupiny byly řádky seřazeny podle ceny a poté zařazen do této skupiny.


  1. Jak získám primární klíč (klíče) tabulky z Postgres přes plpgsql?

  2. Je jedinečný klíč SQL Server také index?

  3. Způsoby obnovení dat ze souboru protokolu transakcí serveru SQL Server

  4. MySQL IFNULL() Vysvětleno