|
|
1
34
阅读 MySQL documentation 在这一点上。 简而言之,MySQL允许从GROUP BY中省略一些列,但出于性能考虑 这仅适用于 如果省略的列都具有相同的值 (在一个分组内),否则, 查询返回的值确实是不确定的 ,正如其他人在这篇文章中正确猜测的那样。可以肯定的是,添加ORDER BY子句不会重新引入任何形式的确定性行为。 虽然不是问题的核心,但这个例子表明,使用*而不是显式枚举所需的列通常是一个坏主意。 MySQL 5.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取第一行有重复项,并丢弃结果集中与之匹配的任何行。因此,如果Jack和Tom属于同一部门,那么在普通SELECT中首先出现的人将是GROUP BY中的结果行。 如果你想控制列表中首先出现的内容,你需要执行ORDER BY。但是,SQL不允许ORDER BY出现在GROUP BY之前,因为它会抛出异常。解决此问题的最佳方法是在子查询中执行ORDER BY,然后在外部查询中执行GROUP BY。这里有一个例子:
这是我发现的最好的技术。我希望这能帮助别人。 |
|
|
3
4
据我所知,为了您的目的,返回的特定行可以被视为随机的。
订购仅在以下时间进行
|
|
|
4
2
你可以放一个:
在执行SQL标准之前
|
|
|
5
1
我发现最好的办法是认为这种类型的查询不受支持。在大多数其他数据库系统中,您不能在HAVING、SELECT或ORDER BY子句中包含既不在GROUP BY子句中也不在聚合函数中的列。 相反,请考虑您的查询内容为:
…因为这就是正在发生的事情。 希望这能有所帮助。... |
|
|
6
0
我认为ANSI SQL要求select只包含GROUP BY子句中的字段,以及聚合函数。 MySQL的这种行为看起来像是返回一些行,可能是服务器读取的最后一行,也可能是它手头的任何一行,但不要依赖它。 |
|
|
7
-1
这将为每个人选择最近的一行:
|
|
|
8
-1
如果按部门分组,其他数据是否重要?我知道Sql Server甚至不允许此查询。如果有这种可能性,听起来可能还有其他问题。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |