MySQL's volledig niet-conforme GROUP BY
kan worden geëmuleerd door Postgres' DISTINCT ON
. Overweeg dit:
MySQL:
SELECT a,b,c,d,e FROM table GROUP BY a
Dit levert 1 rij op per waarde van a
(welke, dat weet je niet precies). Nou, eigenlijk kun je het raden, omdat MySQL niets weet over hash-aggregaten, dus het zal waarschijnlijk een sortering gebruiken... maar het zal alleen sorteren op a
, dus de volgorde van de rijen kan willekeurig zijn. Tenzij het een index met meerdere kolommen gebruikt in plaats van sorteren. Hoe dan ook, het wordt niet gespecificeerd door de zoekopdracht.
Postgres:
SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c
Dit levert 1 rij op per waarde van a
, deze rij is de eerste in de sortering volgens de ORDER BY
gespecificeerd door de vraag. Eenvoudig.
Merk op dat het hier geen aggregaat is dat ik bereken. Dus GROUP BY
heeft eigenlijk geen zin. DISTINCT ON
is veel logischer.
Rails is getrouwd met MySQL, dus het verbaast me niet dat het SQL genereert dat niet werkt in Postgres.