PostgreSQL "row_number()"

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

PostgreSQL "row_number()"

Beitrag von AUGE_OHR »

hi,

in der Version 9.x gibt es row_number().

ich habe folgendes "Problem" : bin in Col1 mit ORDER BY Col1 und stehe auf BBB / LLL
nun klicke ich auf den Header von Col2 und er ändert die Sortierung auf ORDER BY Col2

leider stehe ich aber damit nicht mehr auf meinem "Record" BBB / LLL, also muss ich ihn re-positionieren.

Code: Alles auswählen

ORDER BY Col1
--------------
Col1      Col2

AAA      CCC 
BBB       LLL      -> hier stehe ich -> __record = 2
CCC      ZZZ
DDD      KKK 
EEE       DDD



ORDER BY Col2
--------------
AAA      CCC   -> jetzt steh ich hier
EEE       DDD
DDD      KKK   
BBB       LLL    -> und hier will ich hin -> __record = 2
CCC      ZZZ
ich mache das z.Z. mit einem externen Array.

nun bekam ich den Tip mit "row_number()"

Code: Alles auswählen

test=# create table ohr(col1 text, col2 text);
CREATE TABLE
test=*# copy ohr from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> aaa  ccc
>> bbb  lll
>> ccc  zzz
>> ddd  kkk
>> eee  ddd
>> \.
test=*# commit;
COMMIT
test=# select col1, col2, row_number() over (order by col1) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          2
 ccc  | zzz  |          3
 ddd  | kkk  |          4
 eee  | ddd  |          5
(5 rows)

test=*# select col1, col2, row_number() over (order by col1) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          5
 ddd  | kkk  |          4
 bbb  | lll  |          2
 ccc  | zzz  |          3
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col1;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 bbb  | lll  |          4
 ccc  | zzz  |          5
 ddd  | kkk  |          3
 eee  | ddd  |          2
(5 rows)

test=*# select col1, col2, row_number() over (order by col2) from ohr order by col2;
 col1 | col2 | row_number
------+------+------------
 aaa  | ccc  |          1
 eee  | ddd  |          2
 ddd  | kkk  |          3
 bbb  | lll  |          4
 ccc  | zzz  |          5
(5 rows)
gruss by OHR
Jimmy
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL "row_number()"

Beitrag von bgl »

Seitdem ich das gelesen habe nehme ich mir vor, damit mal zu experimentieren, aber mir fehlt einfach die Zeit :-(

Trotzdem, das ist überaus nützlich. Sich selber Workarounds dafür zu bauen (CREATE TEMPORARY SEQUENCE...) macht nämlich absolut keinen Spass, und ich weiss, dass ich darauf schon mehr als einmal angewiesen war, weil es meines Wissens nichts entsprechendes in PostgreSQL 8.x gibt/gab.

Also danke für den Hinweis.
Antworten