PostgreSQL saat ini tidak mengizinkan GROUP BY
yang ambigu pernyataan di mana hasilnya tergantung pada urutan tabel dipindai, rencana yang digunakan, dll. Begitulah standar mengatakan itu harus bekerja AFAIK, tetapi beberapa database (seperti versi MySQL sebelum 5.7) mengizinkan kueri yang lebih longgar yang hanya memilih nilai pertama ditemui untuk elemen yang muncul di SELECT
daftar tetapi tidak dalam GROUP BY
.
Di PostgreSQL, Anda harus menggunakan DISTINCT ON
untuk jenis kueri ini.
Anda ingin menulis sesuatu seperti:
SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author
left join anwendung on anwendung.name = autor.anwendung;
(Sintaks dikoreksi berdasarkan komentar lanjutan)
Ini sedikit mirip dengan ANY_VALUE(...)
MySQL 5.7 pseudo-fungsi untuk group by
, tetapi sebaliknya - dikatakan bahwa nilai dalam distinct on
klausa harus unik, dan nilai apa pun dapat diterima untuk kolom tidak ditentukan.
Kecuali ada ORDER BY
, tidak ada jaminan nilai mana yang dipilih. Anda biasanya harus memiliki ORDER BY
untuk prediktabilitas.
Juga dicatat bahwa menggunakan agregat seperti min()
atau max()
akan bekerja. Meskipun ini benar - dan akan menghasilkan hasil yang andal dan dapat diprediksi, tidak seperti menggunakan DISTINCT ON
atau GROUP BY
yang ambigu - memiliki biaya kinerja karena kebutuhan untuk penyortiran atau agregasi ekstra, dan hanya berfungsi untuk tipe data ordinal.