GROUP BY
yang benar-benar tidak sesuai standar MySQL dapat ditiru oleh Postgres' DISTINCT ON
. Pertimbangkan ini:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Ini memberikan 1 baris per nilai a
(yang mana, Anda tidak benar-benar tahu). Sebenarnya Anda bisa menebak, karena MySQL tidak tahu tentang agregat hash, jadi mungkin akan menggunakan sort... tetapi hanya akan mengurutkan a
, sehingga urutan baris bisa acak. Kecuali jika menggunakan indeks multikolom alih-alih menyortir. Yah, bagaimanapun, itu tidak ditentukan oleh kueri.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Ini memberikan 1 baris per nilai a
, baris ini akan menjadi baris pertama yang diurutkan menurut ORDER BY
ditentukan oleh kueri. Sederhana.
Perhatikan bahwa di sini, ini bukan agregat yang saya hitung. Jadi GROUP BY
sebenarnya tidak masuk akal. DISTINCT ON
lebih masuk akal.
Rails digabungkan dengan MySQL, jadi saya tidak terkejut bahwa ini menghasilkan SQL yang tidak berfungsi di Postgres.