sql >> Databasteknik >  >> RDS >> Database

Hur man rangordnar rader inom en partition i SQL

Problem:

I resultatuppsättningen vill du partitionera poster och rangordna rader inom varje partition, lägga till ytterligare en kolumn för att visa radernas rangordning inom partitionen.

Exempel:

Vår databas har en tabell som heter magazine med data i följande kolumner:id (primär nyckel), name , category och price .

id namn kategori pris
105 Boende på landet livsstil 1,70
108 Nyhetsmagasin nyheter 3.35
115 Decibel musik 6,50
123 Drum Magazine musik 6,50
145 Solnedgång livsstil 12.00
155 Världen livsstil 9,50
158 Tangentbord musik 8.45

Låt oss gruppera tidningar efter kategori och rangordna varje grupp i fallande ordning efter pris . Visa rankningsposition, namn, kategori och pris för varje tidning.

Lösning:

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

Här är resultatet:

kategori namn pris price_rank
livsstil Solnedgång 12.00 1
livsstil Världen 9,50 2
livsstil Boende på landet 1,70 3
musik Tangentbord 8.45 1
musik Decibel 6,50 2
musik Drum Magazine 6,50 2
nyheter Nyhetsmagasin 3.35 1

Diskussion:

För att partitionera rader och rangordna dem efter deras position inom partitionen, använd funktionen RANK() med PARTITION BY-satsen.

SQLs RANK()-funktion låter oss lägga till en posts position inom resultatuppsättningen eller inom varje partition. I vårt exempel rangordnar vi rader inom en partition.

OVER()-satsen kommer alltid efter RANK(). OVER() måste innehålla en ORDER BY-sats. Om du returnerar rankningar inom en partition, placera en PARTITION BY-sats inuti OVER()-satsen. PARTITION BY följs av ett uttryck eller kolumnnamn; i vårt exempel använder vi kolumnen category (PARTITION BY category ).

Obs! Om du inte använder partitioner kan du utelämna PARTITION BY och helt enkelt lägga in ORDER BY-satsen i OVER().

Efter PARTITION BY, placera ORDER BY följt av namnen på sorteringskolumnerna eller uttrycken. I vårt exempel sorterar vi i fallande ordning efter kolumnen price (ORDER BY price DESC ). Nyckelordet DESC indikerar en fallande sorteringsordning.

I exemplet ovan, använde RANK() med PARTITION BY delade resultaten i separata grupper av tidskrifter efter deras kategori . Med varje grupp sorterades rader efter pris och rankades sedan inom den gruppen.


  1. Är Microsoft Access fortfarande relevant 2020?

  2. 3 sätt att visa sorteringen för din anslutning i MariaDB

  3. Formatera nummer med 2 decimaler

  4. Konvertera SQL2008 RDL-fil till SQL2005