1
34
读 MySQL documentation 在这一点上。 总之,MySQL允许从group by中省略一些列,但是出于性能考虑。 这只是工作 如果省略的列都具有相同的值 (分组内),否则, 查询返回的值确实不确定 正如本帖中其他人正确猜测的那样。为了确保添加ORDERBY子句不会重新引入任何形式的确定性行为。 虽然不是问题的核心,但是这个例子展示了使用*而不是显式地枚举所需的列通常是一个坏主意。 摘自MySQL5.0文档: When using this feature, all rows in each group should have the same values for the columns that are omitted from the GROUP BY part. The server is free to return any value from the group, so the results are indeterminate unless all values are the same. |
2
10
这有点晚了,但我会把它提出来供将来参考。 group by接受具有重复项的第一行,并丢弃结果集中与之匹配的任何行。因此,如果杰克和汤姆有相同的部门,那么在正常选择中第一个出现的人将是分组依据中的结果行。 如果要控制列表中第一个显示的内容,则需要执行“排序依据”。但是,SQL不允许order by在group by之前出现,因为它将引发异常。解决这个问题的最佳方法是在子查询中执行order by,然后在外部查询中执行group by。下面是一个例子:
这是我发现的最好的表演技巧。我希望这能帮助别人。 |
3
4
据我所知,出于您的目的,返回的特定行可以被认为是随机的。
订购仅在以下时间之后进行
|
4
2
你可以把A: 设置sql_mode='仅_full_group_by' 在执行SQL标准按行为分组的查询之前 |
5
1
我发现最好的做法是考虑不支持这种类型的查询。在大多数其他数据库系统中,不能在HAVING、SELECT或ORDER BY子句中包含不在GROUP BY子句或聚合函数中的列。 相反,考虑您的查询为:
…因为这就是发生的事情。 希望这有帮助… |
6
0
我认为ANSISQL要求select只包含group by子句中的字段以及聚合函数。 MySQL的这种行为看起来像是返回一些行,可能是服务器读取的最后一行,或者是它手头上的任何行,但不要依赖于此。 |
7
-1
尝试使用order by选择所需的行。
将返回以下内容:
|
8
-1
如果您是按部门分组的,那么其他数据有关系吗?我知道SQL Server甚至不允许这个查询。如果有这种可能性,听起来可能还有其他问题。 |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |