SELECT DISTINCT ON (some_col)
*
FROM my_table

Saya bertanya-tanya apakah ini valid dan akan bekerja seperti yang diharapkan. Artinya, apakah ini akan mengembalikan semua kolom dari my_table, berdasarkan pada yang berbeda some_col? Saya sudah membaca dokumen Postgres dan tidak melihat alasan mengapa ini tidak akan bekerja seperti yang diharapkan, tetapi telah membaca komentar lama di sini jadi yang menyatakan bahwa kolom perlu dicantumkan secara eksplisit saat menggunakan yang berbeda. di.

Saya tahu ini praktik terbaik untuk mendaftar kolom secara eksplisit, dan juga untuk menggunakan pesanan dengan saat melakukan hal di atas.

latar belakang yang mungkin tidak Anda butuhkan atau peduli

Untuk latar belakang dan alasan saya bertanya, adalah kami bermigrasi dari MySQL ke Postgres. MySQL memiliki "trik" "trik" yang sangat non-standar yang memungkinkan SELECT * ... GROUP BY yang memungkinkan satu untuk dengan mudah select * berdasarkan pada group by. Jawaban dan komentar sebelumnya tentang migrasi trik non-standar yang sesuai dengan Postgres adalah yang paling keruh.

1
KayakinKoder 29 Mei 2021, 01:00

1 menjawab

Jawaban Terbaik
SELECT DISTINCT ON (some_col) *
FROM   my_table;

Saya bertanya-tanya apakah ini valid

Iya. Biasanya, Anda ingin ORDER BY untuk melakukannya untuk menentukan baris mana yang akan dipilih dari setiap set rekan. Tetapi memilih baris sewenang-wenang (tanpa ORDER BY) adalah aplikasi yang valid (dan terkadang bermanfaat!). Anda hanya perlu tahu apa yang Anda lakukan. Mungkin menambahkan komentar untuk Afterworld?

Lihat:

Apakah ini akan mengembalikan semua kolom dari my_table, berdasarkan pada beberapa yang berbeda?

Ini akan mengembalikan semua kolom. Satu baris sewenang-wenang per nilai berbeda dari some_col.

Perhatikan bagaimana saya menggunakan kata "sewenang-wenang", bukan "acak". Baris yang dikembalikan tidak dipilih secara acak sama sekali. Secara sewenang-wenang, tergantung pada detail implementasi saat ini. Biasanya baris pertama secara fisik per nilai berbeda, tetapi itu tergantung.

Saya tahu ini praktik terbaik untuk mendaftar kolom secara eksplisit.

Itu benar-benar tergantung. Seringkali itu. Terkadang tidak. Seperti ketika saya ingin mendapatkan semua kolom untuk mencocokkan jenis baris yang diberikan.

1
Erwin Brandstetter 28 Mei 2021, 22:43