Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Verscheidene Werte nach Metrik Gruppieren

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von tScheckSn, 10 November 2014.

  1. tScheckSn

    tScheckSn Neuer Benutzer

    Hallo,

    Gruppe | Wert | Metrik
    --------------------------
    1 | a| 5
    1 | b| 2
    1 | c| 1
    2 | d| 5
    2 | e| 8
    3 | f| 7
    3 | g| 9
    3 | h| 2
    4 | i| 1

    Aus dieser Tabelle möchte ich Pro Gruppe jeweils den Wert mit der höchste Metrik erhalten.
    Das gefilterte ergebnis sollte also so aussehen.

    Gruppe | Wert | Metrik
    --------------------------
    1 | a| 5
    2 | e| 8
    3 | g| 9
    4 | i| 1

    Könntet ihr mir sagen wie ich das anstelle?
    Mit SELECT MAX(Metrik), Wert?? FROM Tabelle GroupBy Gruppe könnte ich mir zwar die Maximale Metrik anzeigen lassen, wie schaffe ich es aber den Zugehörigen Wert auszugeben?

    Danke im Voraus
    Liebe Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from tschecksn ;
     gruppe | wert | metrik
    --------+------+--------
      1 | a  |  5
      1 | b  |  2
      1 | c  |  1
      2 | d  |  5
      2 | e  |  8
      3 | f  |  7
      3 | g  |  9
      3 | h  |  2
      4 | i  |  1
    (9 rows)
    
    Time: 0,202 ms
    test=*# select distinct on (gruppe) gruppe, wert, metrik from tschecksn order by gruppe, metrik desc;
     gruppe | wert | metrik
    --------+------+--------
      1 | a  |  5
      2 | e  |  8
      3 | g  |  9
      4 | i  |  1
    (4 rows)
    
    Time: 0,303 ms
    test=*# select * from tschecksn where (gruppe, metrik) in (select gruppe, max(metrik) from tschecksn group by gruppe);
     gruppe | wert | metrik
    --------+------+--------
      1 | a  |  5
      2 | e  |  8
      3 | g  |  9
      4 | i  |  1
    (4 rows)
    
    Erstere Lösung mit DISTINCT ON() geht wohl nur in PostgreSQL, die zweite Lösung ist portabel.
     
  3. ukulele

    ukulele Datenbank-Guru

    Das ist ein bischen fummelig:
    Code:
    SELECT    t1.Gruppe,
            t2.Wert,
            t1.Metrik
    FROM    (    SELECT    Gruppe,
                        max(Metrik) AS Wert
                FROM    tabelle
    GROUP BY Gruppe) t1
    LEFT JOIN tabelle t2
    ON        t1.Gruppe = t2.Gruppe
    AND        t1.Metrik = t2.Metrik
    Bei zwei unterschiedlichen Werten mit der selben (höchsten) Metrik wirst du auch 2 Zeilen zurück bekommen.
     
    Zuletzt bearbeitet: 10 November 2014
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden