一尘不染

MySQL:不在GROUP BY中

mysql

该站点产生结果,但是使用SELECT COUNT和SELECT查询以及GROUP
BY具有两个不同的结果计数。这可能是由于phpmyadmin中显示的错误,而不是网站上的错误。

查询:

SELECT count(DISTINCT `name`) as `numrows` FROM `users` WHERE `verified` = '1'

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

PhpMyAdmin提供以下错误:

1055-‘main.users.type’不在GROUP BY中

在阅读MySQL文档时,我仍不清楚必须解决的问题。我似乎无法掌握这一点。


阅读 283

收藏
2020-05-17

共1个答案

一尘不染

您需要有一个完整的小组:

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

SQL92要求select子句中的所有列(聚合除外)都是group
by子句的一部分。SQL99稍微放松了此限制,并指出select子句中的所有列在功能上必须依赖于group
by子句。MySQL默认情况下允许部分分组依据,这可能会产生不确定的答案,例如:

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

即,为组x选择了随机y。可以通过设置@@ 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
2020-05-17