Ich glaube, dass PostgreSQL (mindestens 8.3) erfordert, dass die DISTINCT ON
Ausdrücke übereinstimmen müssen ORDER BY
Ausdrücke. I.E. Sie können DISTINCT ON (accountid)
nicht verwenden, wenn Sie ORDER BY score DESC
haben. Um dies zu beheben, fügen Sie ihn in die ORDER BY
:
SELECT DISTINCT ON (accountid) *
FROM scoretable
ORDER BY accountid, score DESC
LIMIT 10;
Mit dieser Methode können Sie alle Spalten in einer Tabelle auswählen. Es gibt nur eine Zeile pro account zurück, auch wenn doppelte 'max' Werte für die Punktzahl vorhanden sind.
Dies war nützlich für mich, da ich nicht die maximale Punktzahl finden konnte (was mit der Funktion max() einfach ist), aber für die letzte Zeit wurde ein Score für eine Account-ID eingegeben.
tun wir Ihre Hausaufgaben? – paulwhit
Hausaufgaben oder nicht, ist die Frage gut IMHO, als ein einfaches DISTINCT wird nicht funktionieren und es ist erforderlich, um es mit einer Aggregationsfunktion zu kombinieren - ein Problem, das ich auch über ein paar Mal gestolpert, und eine Lösung mit auf SO würde uns alle profitieren. –