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

MySQL :er ikke i GROUP BY

Du skal have en hel gruppe ved:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

SQL92 kræver, at alle kolonner (undtagen aggregater) i select-udtrykket er en del af gruppe for-udtrykket. SQL99 løsner denne begrænsning en smule og siger, at alle kolonner i select-udtrykket skal være funktionelt afhængige af gruppe for-sætning. MySQL tillader som standard delvis gruppe efter, og dette kan give ikke-deterministiske svar, f.eks.:

create table t (x int, y int);
insert into t (x,y) values (1,1),(1,2),(1,3);
select x,y from t group by x;
+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+

dvs. et tilfældigt y vælges for gruppen x. Man kan forhindre denne adfærd ved at indstille @@sql_mode:

set @@sql_mode='ONLY_FULL_GROUP_BY';
select x,y from t group by x; 
ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY


  1. Sådan fungerer TRY_CAST() i SQL Server

  2. Betydningen af ​​basislinjer

  3. Brug af JSONB i PostgreSQL:Sådan gemmes og indekseres JSON-data effektivt i PostgreSQL

  4. Sådan fungerer REPEAT() i MariaDB