Wierzę, że PostgreSQL (co najmniej 8,3) będzie wymagać, aby wyrażenia DISTINCT ON
były zgodne z początkowymi wyrażeniami ORDER BY
. TO ZNACZY. nie możesz użyć DISTINCT ON (accountid)
, gdy masz ORDER BY score DESC
. Aby rozwiązać ten problem, należy dodać go do ORDER BY
:
SELECT DISTINCT ON (accountid) *
FROM scoretable
ORDER BY accountid, score DESC
LIMIT 10;
Stosując tę metodę można wybrać wszystkie kolumny w tabeli. Zwróci on tylko 1 wiersz na konto, nawet jeśli istnieją powielone wartości "maksimum" dla wyniku.
To było dla mnie przydatne, ponieważ nie znalazłem maksymalnego wyniku (co jest łatwe do zrobienia przy pomocy funkcji max()), ale dla ostatniego czasu wprowadzono wynik dla konta.
Czy robimy twoje zadanie domowe? – paulwhit
Praca domowa czy nie, pytanie jest dobre IMHO, ponieważ prosty DISTINCT nie zadziała i trzeba go połączyć z funkcją agregacji - problem, który natknąłem się na kilka razy, a rozwiązanie na SO przyniosłoby korzyści wszystkim. –