sql >> Databasteknik >  >> RDS >> Mysql

Gruppera efter klausul i mySQL och postgreSQL, varför felet i postgreSQL?

Du måste använda AGGREGATERA FUNKTION :

Aggregatfunktioner beräknar ett enda resultat från en uppsättning indatavärden.

SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table 
GROUP BY col2;

db<>fioldemo

MySQL-hantering av GROUP BY :

I standard SQL kan en fråga som innehåller en GROUP BY-sats inte hänvisa till icke aggregerade kolumner i urvalslistan som inte är namngivna i GROUP BY-satsen

och:

MySQL utökar användningen av GROUP BY så att urvalslistan kan referera till icke aggregerade kolumner som inte är namngivna i GROUP BY-satsen. Detta betyder att den föregående frågan är laglig i MySQL. Du kan använda den här funktionen för att få bättre prestanda genom att undvika onödig kolumnsortering och gruppering. Detta är dock användbart främst när alla värden i varje icke aggregerad kolumn som inte är namngivna i GROUP BY är desamma för varje grupp. Servern är fri att välja vilket värde som helst från varje grupp, så om de inte är samma är de valda värdena obestämda

Så med MySQL-version utan explicit aggregatfunktion kan du sluta med obestämda värden. Jag rekommenderar starkt att du använder specifik aggregatfunktion.

EDIT:

Från MySQL-hantering av GROUP BY :

SQL92 och tidigare tillåter inte frågor där urvalslistan, HAVING-villkoret eller ORDER BY-listan hänvisar till icke aggregerade kolumner som inte är namngivna i GROUP BY-satsen.

SQL99 och senare tillåter sådana icke-aggregator per valfri funktion T301 om de är funktionellt beroende av GROUP BY-kolumner: Om ett sådant förhållande finns mellan namn och custid är frågan laglig. Detta skulle till exempel vara fallet om custid en primär nyckel för kunder.

Exempel:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
  ON o.custid = c.custid
GROUP BY o.custid;


  1. Konvertera åtkomst till PostgreSQL?

  2. Steg för steg uppgraderingsprocess till R12.2 Uppgradering del -3

  3. Kul med (columnstore) komprimering på ett väldigt stort bord – del 2

  4. Hur man får medarbetarna med sina chefer