Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Der Versuch, over() und partition by zu verstehen

Versuchen Sie, nach Bestelldatum zu bestellen, dann sehen Sie die Ergebnisse einfacher

select Row_Number() over(partition by orderdate order by orderdate asc) 
    as Rownumber, salesorderid, orderdate
from test2
order by orderdate;

geben sollte (ich habe zur Verdeutlichung Leerzeilen hinzugefügt)

ROWNUMBER     SALESORDERID       ORDERDATE
1             43664              07/01/2001

1             43911              08/01/2001
2             43867              08/01/2001
3             43895              08/01/2001
4             43894              08/01/2001
5             43877              08/01/2001

1             44109              09/01/2001

1             44285              10/01/2001

1             44483              11/01/2001
2             44501              11/01/2001

Sie werden feststellen, dass das Ergebnis in „Partitionen“ unterteilt ist, wobei jede Partition die Reihe von Zeilen mit identischen Bestelldaten ist. Das bedeutet 'Aufteilen nach Bestelldatum'.

Innerhalb einer Partition werden die Zeilen nach Bestelldatum geordnet, gemäß der zweiten Klausel von „(partition by orderdate order by orderdate asc)“. Das ist nicht sehr nützlich, da alle Zeilen innerhalb einer Partition das gleiche Bestelldatum haben werden. Aus diesem Grund ist die Reihenfolge der Zeilen innerhalb einer Partition zufällig. Versuchen Sie, innerhalb der partition by-Klausel nach salesorderid zu bestellen, um ein besser reproduzierbares Ergebnis zu erhalten.

row_number() gibt nur die Reihenfolge der Zeilen innerhalb jeder Partition zurück