Saya memiliki tabel di pgsql dengan nama (memiliki lebih dari 1 juta baris), tetapi saya juga memiliki banyak duplikat. Saya pilih 3 bidang: id
, name
, metadata
.
Saya ingin memilihnya secara acak dengan ORDER BY RANDOM()
dan LIMIT 1000
, jadi yang saya lakukan ini adalah banyak langkah untuk menghemat memori dalam skrip PHP saya.
Tetapi bagaimana saya bisa melakukannya sehingga hanya memberi saya daftar yang tidak memiliki duplikat dalam nama.
Misalnya [1,"Michael Fox","2003-03-03,34,M,4545"]
akan dikembalikan tapi tidak [2,"Michael Fox","1989-02-23,M,5633"]
. Bidang nama adalah yang paling penting dan harus unik dalam daftar setiap kali saya memilih dan harus acak.
Saya mencoba dengan GROUP BY name
, tapi itu mengharapkan saya untuk memiliki id dan metadata di GROUP BY
juga atau dalam fungsi aggragate, tetapi saya tidak ingin mereka entah bagaimana difilter.
Adakah yang tahu cara mengambil banyak kolom tetapi hanya melakukan yang berbeda pada satu kolom?
sumber
order by name
dibutuhkan? Akankah itu menghasilkan hasil yang berbeda denganorder by col1
?name
perlu. Periksadistinct on
di manual.Anda ingin yang
DISTINCT ON
klausa .Anda tidak memberikan data sampel atau kueri lengkap jadi saya tidak punya apa-apa untuk ditunjukkan kepada Anda. Anda ingin menulis sesuatu seperti:
Ini akan mengembalikan kumpulan baris yang tidak dapat diprediksi (tetapi tidak "acak"). Jika Anda ingin membuatnya dapat diprediksi, tambahkan
ORDER BY
jawaban per Clodaldo. Jika Anda ingin membuatnya benar-benar acak, Anda pasti menginginkannyaORDER BY random()
.sumber
sumber
GROUP BY
klausa.