sql >> Database >  >> RDS >> Mysql

MySQL:staat niet in GROUP BY

Je moet een volledige groep hebben op:

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

SQL92 vereist dat alle kolommen (behalve aggregaten) in de select-clausule deel uitmaken van de group by-clausule. SQL99 maakt deze beperking wat losser en stelt dat alle kolommen in de select-clausule functioneel afhankelijk moeten zijn van de group by-clausule. MySQL staat standaard gedeeltelijke group by toe en dit kan niet-deterministische antwoorden opleveren, bijvoorbeeld:

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 |
+------+------+

D.w.z. een willekeurige y is geselecteerd voor de groep x. Men kan dit gedrag voorkomen door @@sql_mode in te stellen:

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. Geïndexeerde weergaven en statistieken

  2. Django-fixture mislukt, met vermelding van DatabaseError:waarde te lang voor type karakter variërend (50)

  3. Geef de dag, maand en jaar terug in MySQL

  4. Neem de controle over uw gegevens met Microsoft Access