sql >> Databáze >  >> RDS >> Mysql

MySQL:není ve skupině GROUP BY

Musíte mít celou skupinu do:

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

SQL92 vyžaduje, aby všechny sloupce (kromě agregátů) v klauzuli select byly součástí skupiny po klauzuli. SQL99 toto omezení trochu uvolňuje a uvádí, že všechny sloupce v klauzuli select musí být funkčně závislé na klauzuli po skupině. MySQL ve výchozím nastavení umožňuje částečné seskupování a to může vést k nedeterministickým odpovědím, příklad:

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

Tj. pro skupinu x je vybráno náhodné y. Tomuto chování lze zabránit nastavením @@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. Jak Cos() funguje v PostgreSQL

  2. Jak vrátit zlomkové sekundy z hodnoty Datetime v Oracle

  3. Použití CHOP ve výuce

  4. Jak vytvořit databázi na serveru SQL pomocí TSQL nebo GUI - SQL Server / TSQL Tutorial část 24