PostgreSQL в момента не позволява двусмислени GROUP BY
изрази, при които резултатите зависят от реда, в който таблицата се сканира, използвания план и т.н. Ето как стандартът казва, че трябва да работи AFAIK, но някои бази данни (като версии на MySQL преди 5.7) позволяват по-свободни заявки, които просто избират първата стойност се среща за елементи, появяващи се в SELECT
списък, но не в GROUP BY
.
В PostgreSQL трябва да използвате DISTINCT ON
за този вид заявка.
Искате да напишете нещо като:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Коригиран синтаксис въз основа на последващ коментар)
Това е малко като ANY_VALUE(...)
на MySQL 5.7 псевдофункция за group by
, но в обратна посока - пише, че стойностите в distinct on
клаузата трябва да е уникална и всяка стойност е приемлива за колоните не посочено.
Освен ако няма ORDER BY
, няма гаранция кои стойности са избрани. Обикновено трябва да имате ORDER BY
за предвидимост.
Също така беше отбелязано, че се използва агрегат като min()
или max()
бих работил. Въпреки че това е вярно - и ще доведе до надеждни и предвидими резултати, за разлика от използването на DISTINCT ON
или двусмислена GROUP BY
- има разходи за производителност поради необходимостта от допълнително сортиране или агрегиране и работи само за редовни типове данни.