sql >> Database >  >> RDS >> Mysql

PostgreSQL GROUP BY anders dan MySQL?

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.



  1. Zoek naar een bepaalde string in de Oracle clob-kolom

  2. Draait Oracle de transactie terug bij een fout?

  3. Regex-patroon in de functie SQL Replace?

  4. Waar is de Oracle Bug Database?