【发布时间】:2014-11-06 04:01:44
【问题描述】:
该站点产生结果,但使用 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 文档时,我仍然不清楚我必须修复什么。我似乎无法理解这一点。
【问题讨论】:
-
第一个查询是按名称进行隐式分组。第二个,写一个类似的方式是这样的: SELECT
nameFROMusersWHEREverified= '1' GROUP BYnameORDER BY COUNT(*) DESC LIMIT 0, 25 -
我不确定你在暗示什么。使用查询: SELECT name,type,language FROM synset WHERE verify = '1' GROUP BY name ORDER BY COUNT() DESC LIMIT 0, 25 会发生同样的错误。类型不在 Group By 如果我添加类型和语言,错误就会消失。这可能是由于升级到 MySql 造成的吗? SELECT name,type,language FROM synset WHERE verify = '1' GROUP BY name,type,language ORDER BY COUNT() DESC LIMIT 0, 25 可以正常工作。
-
显然,将所有字段添加到 group by 时查询时间很糟糕
-
嗨@James - SELECT 或 ORDER BY 子句中使用的任何列/表达式如果没有被聚合(COUNT、SUM 等),则必须包含在 GROUP BY 子句中。这就是您收到错误的原因 - 您选择了列类型、语言和代码,但它们不在 GROUP BY 子句中(如接受的答案所示)。如果 MySQL 中有设置自动分组,我个人会非常谨慎地使用它。
-
@JordanParker: "如果 MySQL 中有设置自动分组" - 这实际上是默认行为。 James 显然启用了
ONLY_FULL_GROUP_BY选项。否则该语句将只返回“随机”结果(MySQL 不称其为随机,他们称其为“不确定”)percona.com/blog/2006/09/06/…
标签: mysql sql phpmyadmin mysql-error-1055