PostgreSQL n'autorise pas actuellement l'ambiguïté GROUP BY
des instructions où les résultats dépendent de l'ordre dans lequel la table est analysée, du plan utilisé, etc. rencontrés pour les éléments apparaissant dans le SELECT
list mais pas dans GROUP BY
.
Dans PostgreSQL, vous devez utiliser DISTINCT ON
pour ce type de requête.
Vous voulez écrire quelque chose comme :
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Syntaxe corrigée en fonction du commentaire de suivi)
C'est un peu comme ANY_VALUE(...)
de MySQL 5.7 pseudo-fonction pour group by
, mais à l'envers - il dit que les valeurs dans le distinct on
la clause doit être unique et toute valeur est acceptable pour les colonnes not spécifié.
Sauf s'il y a un ORDER BY
, il n'y a aucune garantie quant aux valeurs sélectionnées. Vous devriez généralement avoir un ORDER BY
pour la prévisibilité.
Il a également été noté que l'utilisation d'un agrégat tel que min()
ou max()
travaillerait. Bien que cela soit vrai - et conduira à des résultats fiables et prévisibles, contrairement à l'utilisation de DISTINCT ON
ou un GROUP BY
ambigu - il a un coût de performance en raison de la nécessité d'un tri ou d'une agrégation supplémentaire, et il ne fonctionne que pour les types de données ordinaux.