PostgreSQL al momento non consente GROUP BY
ambigui istruzioni in cui i risultati dipendono dall'ordine di scansione della tabella, dal piano utilizzato, ecc. È così che lo standard dice che dovrebbe funzionare AFAIK, ma alcuni database (come le versioni di MySQL precedenti alla 5.7) consentono query più flessibili che selezionano solo il primo valore incontrati per gli elementi che appaiono in SELECT
elenco ma non in GROUP BY
.
In PostgreSQL, dovresti usare DISTINCT ON
per questo tipo di query.
Vuoi scrivere qualcosa come:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Sintassi corretta in base al commento successivo)
Questo è un po' come ANY_VALUE(...)
di MySQL 5.7 pseudo-funzione per group by
, ma al contrario - dice che i valori in distinct on
la clausola deve essere univoca e qualsiasi valore è accettabile per le colonne non specificato.
A meno che non ci sia un ORDER BY
, non vi è alcuna garanzia su quali valori siano selezionati. Di solito dovresti avere un ORDER BY
per prevedibilità.
È stato anche notato che utilizzando un aggregato come min()
o max()
funzionerebbe. Anche se questo è vero e porterà a risultati affidabili e prevedibili, a differenza dell'utilizzo di DISTINCT ON
o un ambiguo GROUP BY
- ha un costo di prestazioni dovuto alla necessità di ordinamento o aggregazione extra e funziona solo per i tipi di dati ordinali.