Verscheidene Werte nach Metrik Gruppieren

tScheckSn

Neuer Benutzer
Beiträge
4
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
 
Werbung:
Könntet ihr mir sagen wie ich das anstelle?

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.
 
Werbung:
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:
Zurück
Oben