Jetzt seh' ich grade: Hab in den Titel "Je oberste 5" reingeschrieben. Sollte natürlich dann obeste 3 heißen - mir geht's ja nicht um die tatsächlich Anzahl, sondern nur um das SQL.
Hallo,
ich habe mal eine kleine geschwinde Frage, bei der ich euch um einen Gedankenanstoß bitten möchte. Ich kann mich einfach nicht mehr erinnern, wie wir das früher gelöst haben:
Folgende Tabelle (Werte sind völlig egal):
science_id, account_id, relevance
1;10357;7632
1;21693;1450
1;72232;1008
1;70133;777
1;22881;728
1;59547;690
1;7991;494
1;146095;273
1;125306;210
2;308680;441
2;183004;80
2;271525;49
2;12699;39
2;18554;33
2;5012;25
2;56689;22
2;4108;18
2;18723;17
Ich möchte gerne als Ergebnis die Top-3 account_ids pro science_id rausfiltern, also die Zeilen mit der höchsten 'relevance'. Das Ergebnis wäre also
science_id, account_id, relevance
1;10357;7632
1;21693;1450
1;72232;1008
2;308680;441
2;183004;80
2;271525;49
Ich wäre jetzt hier mit einem GROUP BY science_id HAVING ... gestartet, kann mich aber beim besten Willen nicht mehr an die korrekte Klausel erinnern.
Habt ihr einen Tip für mich?
Liebe Grüße
az_hf0
Jetzt seh' ich grade: Hab in den Titel "Je oberste 5" reingeschrieben. Sollte natürlich dann obeste 3 heißen - mir geht's ja nicht um die tatsächlich Anzahl, sondern nur um das SQL.
Geht so ab 8.4 (Windowing Function)Code:test=# select id, value from top3 order by id, value; id | value ----+------- 1 | 1 1 | 3 1 | 4 1 | 5 1 | 7 2 | 5 2 | 6 2 | 7 2 | 8 2 | 9 (10 Zeilen) Zeit: 0,256 ms test=*# select id, value from (select id, value, row_number() over (partition by id order by value desc) from top3) foo where row_number <= 3; id | value ----+------- 1 | 7 1 | 5 1 | 4 2 | 9 2 | 8 2 | 7 (6 Zeilen)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Danke Andreas, wir haben aber leider auf dem Cluster noch 8.3 im Einsatz und werden erst mit Ubuntu 10.04 wechseln.
Da muss ich bis dahin noch mit einem Non-Windowing SQL-Query klarkommen :-/
Ich hätte es auch noch mit einem WHERE relevance > ALL(...) probiert, aber da stecke ich grade jetzt fest.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hier noch ein kurzes Update: Unser Kram läuft seit einigen Wochen jetzt auch auf 8.4 und das Windowing-Query hat sich bewährt
Dankeschön!
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen