Ranking-Operationen mit Standard SQL ?

BI und Data-Management
Verfügbare Informationen zu "Ranking-Operationen mit Standard SQL ?"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Meik Truschkowski - Christoph Albrecht
  • Forum: BI und Data-Management
  • Forenbeschreibung: Diskussionsforum
  • aus dem Unterforum: OLAP
  • Antworten: 4
  • Forum gestartet am: Dienstag 13.02.2007
  • Sprache: deutsch
  • Link zum Originaltopic: Ranking-Operationen mit Standard SQL ?
  • Letzte Antwort: vor 17 Jahren, 1 Monat, 6 Tagen, 14 Stunden, 52 Minuten
  • Alle Beiträge und Antworten zu "Ranking-Operationen mit Standard SQL ?"

    Re: Ranking-Operationen mit Standard SQL ?

    Meik Truschkowski - 23.03.2007, 10:45

    Ranking-Operationen mit Standard SQL ?
    Ich habe eine DB2-Abfrage, die ich für einen Proof-of-Concept mit MS Access nachbilden muss.

    Die Abfrage enthält das Ranking-Konstrukt

    select
    (...)
    , row_number() over (partition by feld1, feld2 ... ) order by feld3
    from <Table>

    Wie kann ich das in Standard-SQL (bzw. Access SQL) ausdrücken? Hat jemand irgendwo einen Algorithmus dazu rumliegen?



    Re: Ranking-Operationen mit Standard SQL ?

    Christoph Albrecht - 23.03.2007, 11:05


    Oooops, jetzt hab ich deinen Beitrag editiert, statt ne Antwort zu schreiben. Sorry, bin mit der Admin-Rolle noch nicht so vertraut.



    Re: Ranking-Operationen mit Standard SQL ?

    Meik Truschkowski - 23.03.2007, 11:25


    Also was mit der Abfrage erreicht werden soll:
    ungefähr sowas:

    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

    (Quelle: Wikipedia)

    Mit einem Group-by würde man nur den höchsten (oder kleinsten) Wert zurückbekommen.

    In meinem Problem wird das ganze dann noch in eine komplexere Abfrage eingebettet.

    --------------------------
    mfg Meik



    Re: Ranking-Operationen mit Standard SQL ?

    Christoph Albrecht - 23.03.2007, 11:54


    Danke für die Erklärung ;-)

    Soetwas sollte Dir mit plain SQL ein row number zur Verfügung stellen:

    SELECT emp_id, lname, fname, job_id,
    (SELECT COUNT(*) FROM employee e2 WHERE e2.lname <= e.lname AND e2.job_id = 10) AS rownumber
    FROM employee e
    WHERE job_id = 10
    ORDER BY lname

    Funktioniert nur wenn das ORDER BY kriterium eindeutig ist, sonst werden Nummern doppelt verteilt. (Quelle www.sqlteam.com)

    Wenn jetzt in das implizite SQL Statement und in den join noch das partitionierungs Kriterium mit eingebaut wird, sollte das auch für immer wieder neu beginnende Nummern funktionieren.
    Das wird mit höherem Kompexitätsgrad natürlich recht unübersichtlich und sicher nicht gerade performant.

    Grüße
    Christoph



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum BI und Data-Management

    Das Forum ist fertig! - gepostet von Meik Truschkowski am Dienstag 13.02.2007



    Ähnliche Beiträge wie "Ranking-Operationen mit Standard SQL ?"

    Ranking System - .LoGo (Dienstag 26.04.2005)
    Ally-Ranking - Grandany (Freitag 23.03.2007)
    Google Ranking - mike (Samstag 16.12.2006)
    Ally Gesamt Ranking - ParAdoX (Montag 01.08.2005)
    GSS 2009 Runde 4: Sprintturnier - Nebelchen (Samstag 14.11.2009)
    World-Ranking Counter-Strike 1.6 - ellalagi (Sonntag 26.03.2006)
    avatare ranking des forums - Paul Weller (Donnerstag 28.06.2007)
    Ranking!!! - Markus (Freitag 28.04.2006)
    Ranking von [H|H] - rul3r (Freitag 04.08.2006)
    3. GDC Ranking Event in Halle a.d. Saale - Bia (Dienstag 24.04.2007)