PostgreSQLは現在、あいまいなGROUP BY
を許可していません 結果がテーブルがスキャンされる順序、使用される計画などに依存するステートメント。これは、標準ではAFAIKで機能する必要があると述べていますが、一部のデータベース(5.7より前のMySQLバージョンなど)では、最初の値を選択するだけの緩いクエリが許可されます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;
(フォローアップコメントに基づいて構文が修正されました)
これは、MySQL5.7のANY_VALUE(...)
に少し似ています。 group by
の疑似関数 、ただし逆に、distinct on
の値は 句は一意である必要があり、列には任意の値を使用できます 指定されています。
ORDER BY
がない限り 、どの値が選択されるかについての保証はありません。通常、ORDER BY
が必要です 予測可能性のために。
min()
のような集計を使用することにも注意してください。 またはmax()
動作します。これは真実ですが、DISTINCT ON
を使用する場合とは異なり、信頼性が高く予測可能な結果が得られます。 またはあいまいなGROUP BY
-追加の並べ替えや集計が必要なため、パフォーマンスコストがかかり、順序データ型でのみ機能します。