Ergebnis 1 bis 6 von 6

Thema: Je obersten 5

  1. #1
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard Je obersten 5

    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

  2. #2
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard

    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.

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von az_hf0 Beitrag anzeigen
    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.
    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)
    Geht so ab 8.4 (Windowing Function)

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard

    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.

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von az_hf0 Beitrag anzeigen
    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.
    Tja, vor 8.4 ist es halt schwer. Man könnte sich eine SRF schreiben.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard

    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!

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum