我回答了这个问题:https : //stackoverflow.com/a/18521684/1707323,查询类似于:
SELECT
*
FROM
(
SELECT
*
FROM
table_name
WHERE
table_name.some_field='1' OR
table_name.some_field='2'
ORDER BY
table_name.some_field
) sub_query
GROUP BY
sub_query.primary_key_column
并发表了评论
聪明的想法,但这不能保证在 MySQL 中工作,并且会在 SQL Server 和大多数其他数据库系统中导致硬错误。从 Extensions 引用到 GROUP BY:“服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。此外,添加 ORDER BY 不会影响从每个组中选择值条款。
对于您的特定版本的 MySQL,对于您的特定表,它完全有可能始终为您提供您想要的结果,因为您获得的查询计划会导致您的查询以您期望的方式执行。但是,如果文档明确指出它将不确定地选择一个值,并且您的 ORDER BY 不足以使此查询可靠,那么在其他数据库或其他版本的 MySQL 上尝试此操作时我会非常谨慎。
MySQl 手册还继续说:Sorting of the result set occurs after values have been chosen, and ORDER BY does not affect which values within each group the server chooses.
对于诸如
SELECT
*
FROM
table_name
WHERE
table_name.some_field='1' OR
table_name.some_field='2'
GROUP BY
table_name.primary_key_column
ORDER BY
table_name.some_field
但这与子查询中带有 order by 子句的查询不同。我确实找到了类似的问题,但它再次不涉及子查询中的 ORDER BY 子句
任何人都可以参考 MySQL 手册对此有所了解ORDER BY
,子查询中的子句是否会强制分组始终使用该组的第一个实例。
编辑:观察
FIFO 或 LIFO不应该与 GROUP BY 的操作方式有关吗?我就是想不通:
服务器可以从每个组中自由选择任何值
这种选择必须有某种逻辑。在没有某种指令的情况下,不允许计算机自行做出选择。如果计算机可以在没有任何指令的情况下自行做出选择,那么我们就真正达到了计算的最终目标,即人工智能,现在计算机可以通过给应用程序一个指令来编写我的所有代码。[LOL] 这是无证逻辑的可能性有多大?逻辑中的 RAND 不会比 FIFO 或 FILO 占用更多的处理能力吗?这里必须涉及一些逻辑,这些逻辑可能只是没有记录,但 100% 的时间都有效。我一直喜欢的一件事是几何证明。我知道你必须证明它是对还是错。我可以证明它是如何工作的,但我还没有看到它是如何工作的。