Изцяло несъответстващият на стандартите MySQL GROUP BY
може да се емулира от DISTINCT ON
на Postgres . Помислете за това:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Това осигурява 1 ред на стойност на a
(коя, всъщност не знаете). Всъщност можете да се досетите, защото MySQL не знае за хеш агрегатите, така че вероятно ще използва сортиране... но ще сортира само по a
, така че редът на редовете може да бъде случаен. Освен ако не използва индекс с няколко колони вместо сортиране. Е, така или иначе, не е посочено от заявката.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Това осигурява 1 ред на стойност на a
, този ред ще бъде първият в сортирането според ORDER BY
посочено от заявката. Просто.
Имайте предвид, че тук не е съвкупност, която изчислявам. Така че GROUP BY
всъщност няма смисъл. DISTINCT ON
има много повече смисъл.
Rails е женен за MySQL, така че не съм изненадан, че генерира SQL, който не работи в Postgres.