Der Rang bezeichnet in der Informatik eine aufsteigende Reihenfolge von Objekten.

Verwendung Bearbeiten

Bei der Datenaggregation für Data-Warehouse-Anwendungen kommt die Rang-Funktion oft zum Einsatz. Durch diese Funktion werden Sätze aus einer Selektion mit einer fortlaufenden Nummerierung versehen.

Folgende Varianten der Rang-Funktion werden eingesetzt:

  • Duplikate sollen denselben Rang oder unterschiedliche Ränge erhalten
  • Partitionierung bedeutet (in diesem Zusammenhang), dass beim Wechsel eines übergeordneten Ordnungskriteriums die Nummerierung wieder von neuem beginnt

Beispiel Bearbeiten

Die Liste der Produkte soll mit einem Rang ausgegeben werden. Duplikate sollen dabei nicht berücksichtigt werden.

In der Spalte RANG wird der Rang ohne Partitionierung ausgegeben.

In der Spalte PART_RANG wird der Rang mit Partitionierung ausgegeben.

SQL für DB2 LUW

   select
     abteilung
   , produkt_nr
   , row_number() over(order     by abteilung        , produkt_nr) rang
   , row_number() over(partition by abteilung order by produkt_nr) part_rang
   from pr
   order by abteilung, produkt_nr
   ;
   
    ABTEILUNG PRODUKT_NR       RANG  PART_RANG
   ---------- ---------- ---------- ----------
            1          2          1          1
            1          3          2          2
            1          3          3          3
            1          3          4          4
            1          4          5          5
            1          7          6          6
            1          9          7          7
            2          1          8          1
            2          3          9          2
            2          3         10          3

Die Liste der Produkte soll mit einem Rang ausgegeben werden. Dieses Mal sollen Duplikate denselben Rang erhalten.

In der Spalte DRANG wird der Rang ohne Partitionierung ausgegeben.

In der Spalte PART_DRANG wird der Rang mit Partitionierung ausgegeben.

SQL für DB2 LUW

   select
     abteilung
   , produkt_nr
   , dense_rank() over(order     by abteilung        , produkt_nr) drang
   , dense_rank() over(partition by abteilung order by produkt_nr) part_drang
   from pr
   order by abteilung, produkt_nr
   ;
    ABTEILUNG PRODUKT_NR      DRANG PART_DRANG
    --------- ---------- ---------- ----------
            1          2          1          1
            1          3          2          2
            1          3          2          2
            1          3          2          2
            1          4          3          3
            1          7          4          4
            1          9          5          5
            2          1          6          1
            2          3          7          2
            2          3          7          2

Weblinks Bearbeiten