MySQL的GROUP BY只返回第一行(MySQL GROUP BY returns only f

2019-09-17 16:10发布

我有一个表命名forms有以下结构-

GROUP       | FORM       | FILEPATH
====================================
SomeGroup   | SomeForm1  | SomePath1
SomeGroup   | SomeForm2  | SomePath2
------------------------------------

我用下面的查询 -

SELECT * FROM forms GROUP BY 'GROUP'

它仅返回第一行向

GROUP       | FORM       | FILEPATH
====================================
SomeGroup   | SomeForm1  | SomePath1
------------------------------------

难道不应该返回两个(或所有的话)? 还是我(可能)错了吗?

Answer 1:

由于手动状态:

在标准的SQL,包括查询GROUP BY子句中不能引用非聚合列在未在指定的选择列表中的GROUP BY子句。 例如,因为此查询是标准的SQL非法name在选择列表中列不会在出现GROUP BY

  SELECT o.custid,c.name,MAX(o.payment)    从接单的O,客户为c    WHERE o.custid = c.custid    GROUP BY o.custid; 

对于查询是合法的,该name列必须从选择列表中被省略或在指定的GROUP BY子句。

MySQL的扩展使用GROUP BY ,这样的选择列表可参考在未命名的非聚合列GROUP BY子句。 这意味着,前面的查询是在MySQL中是合法的。 您可以使用此功能,避免不必要的列排序和分组,以获得更好的性能。 然而,当主要在未命名的每个非聚集列所有值,这是有用的GROUP BY是为每个组相同。 该服务器是可以自由选择从每个组中的任何值,所以,除非它们是相同的,所选择的值是不确定的。

在你的情况下,MySQL正确地履行分组操作,但(因为你选择所有列,其中包括由你不是分组查询)为您提供了从每个组一个不确定的一个记录。



Answer 2:

它只返回一行,因为你的价值观GROUP列是相同的......这基本上是如何GROUP BY的作品。

顺便说一句,当使用GROUP BY这是很好的形式,以用于其他列聚合函数,如COUNT() MIN() MAX() 在MySQL 通常返回每个组的第一行,如果你只是指定的列名; 其他数据库不会喜欢,虽然。



Answer 3:

您的代码:

SELECT * FROM forms GROUP BY 'GROUP'

是不是很“好”的SQL,MySQL的让您摆脱它,并返回只有一个GROUP BY子句中未提到的所有列的值。 几乎任何其他数据库不会执行此查询。 作为一项规则,任何列,这不是必须的聚集函数中使用的分组条件的一部分。



Answer 4:

至于MySQL的来讲,我只是命中和试验解决我的问题。

我有同样的问题,11分钟前。 我采用的是MySQL的语句是这样的:

SELECT * FROM forms GROUP BY 'ID'; // returns only one row

然而,使用类似下面的语句将一代产量相同的结果:

SELECT ID FROM forms GROUP BY 'ID'; // returns only one row

下面是我的解决方案:

SELECT ID FROM forms GROUP BY ID; // returns more than one row (with one column of field "ID") grouped by ID

要么

SELECT * FROM forms GROUP BY ID; // returns more than one row (with columns of all fields) grouped by ID

要么

SELECT * FROM forms GROUP BY `ID`; // returns more than one row (with columns of all fields) grouped by ID

教训:DONOT使用分号,我相信它用冒号一个stringtype搜索。 从列名删除冒号,它会被它的值组。 然而,你可以使用反引号逃脱如。 ID



Answer 5:

SELECT * FROM forms GROUP BY `GROUP` 

这是奇怪的是,您的查询不工作



Answer 6:

上述结果是一种正确的,但并不完全。

选择所有列,这不是一部分GROUP BY语句必须通过一些功能(汇总从MySQL实况聚合功能的列表 )。 它们大多与数字列一起使用。

除此之外,您的查询将返回每隔(组合)在引用的列属性的一个输出行GROUP BY语句。 你的情况是存在的只是一个不同的值GROUP列,即“SomeGroup”,所以输出将只包含该值一行。



Answer 7:

Group by如果您有任何组函数条款应只要求,说maxminavgsum等,查询表达式中使用。 您的查询没有显示出任何这样的功能。 这意味着你实际上不需要Group by条款。 如果你还在用这样的条款,你会从分组的结果仅接收第一条记录。

因此,在您的查询的输出是完美的。



Answer 8:

谢谢大家指出了明显的错误,我太盲目看。 我终于取代GROUP BYORDER BY ,其中包括一个WHERE子句,以获得我想要的结果。 这就是我打算一直使用。 愚蠢的我。

我最后的查询就会成为这 -

SELECT * FROM forms WHERE GROUP='SomeGroup' ORDER BY 'GROUP'


Answer 9:

查询结果是完美的; 它将返回只有一行。



文章来源: MySQL GROUP BY returns only first row