sql >> Database teknologi >  >> RDS >> Mysql

Gruppér efter klausul i mySQL og postgreSQL, hvorfor fejlen i postgreSQL?

Du skal bruge AGGREGAT FUNKTION :

Aggregerede funktioner beregner et enkelt resultat ud fra et sæt inputværdier.

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

db<>fiddle-demo

MySQL-håndtering af GROUP BY :

I standard SQL kan en forespørgsel, der indeholder en GROUP BY-sætning, ikke henvise til ikke-aggregerede kolonner i udvalgslisten, som ikke er navngivet i GROUP BY-sætningen

og:

MySQL udvider brugen af ​​GROUP BY, så den udvalgte liste kan henvise til ikke-aggregerede kolonner, der ikke er navngivet i GROUP BY-sætningen. Det betyder, at den foregående forespørgsel er lovlig i MySQL. Du kan bruge denne funktion til at få bedre ydeevne ved at undgå unødvendig kolonnesortering og gruppering. Dette er dog primært nyttigt, når alle værdier i hver ikke-aggregerede kolonne, der ikke er navngivet i GROUP BY, er de samme for hver gruppe. Serveren kan frit vælge enhver værdi fra hver gruppe, så medmindre de er ens, er de valgte værdier ubestemte

Så med MySQL-version uden eksplicit aggregeret funktion kan du ende med udetermininistiske værdier. Jeg foreslår kraftigt at bruge en specifik aggregeret funktion.

EDIT:

Fra MySQL-håndtering af GROUP BY :

SQL92 og tidligere tillader ikke forespørgsler, hvor valglisten, HAVING-betingelsen eller ORDER BY-listen refererer til ikke-aggregerede kolonner, der ikke er navngivet i GROUP BY-udtrykket.

SQL99 og senere tillader sådanne ikke-aggregater pr. valgfri funktion T301 hvis de er funktionelt afhængige af GROUP BY-kolonner: Hvis et sådant forhold eksisterer mellem navn og custid, er forespørgslen lovlig. Dette ville for eksempel være tilfældet, hvis varetagelse af en primær nøgle for kunder.

Eksempel:

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. Hvordan konverterer man tid til iPhone-enhedens tidszone?

  2. Bedste tilgange til grupperet median

  3. PostgreSQL:Hvordan sender man parametre fra kommandolinjen?

  4. Sådan aktiverer du generelle logfiler og fejllogfiler i AWS RDS