【发布时间】:2016-12-11 16:08:04
【问题描述】:
今天我遇到了一个非常常见的问题,即从由group by 分割的每组数据集中选择具有最小值的行。我找到了一个 SQLite 独有的解决方案(它在 MySQL 中无法正常工作并在 PostgreSQL 中引发错误)并且不使用任何连接。它看起来像这样:
SELECT *, min(x) FROM table GROUP BY y
Here 是一个例子。
但是,我不明白 为什么 这有效 - 只是通过包含一个聚合函数,每个组都以某种方式隐式排序并返回聚合函数的结果对应的行。默认 SQL 行为是选择任意行。我翻遍了relevant SQLite documentation 并没有找到任何解释。这就是我想要解释的原因。
编辑:到目前为止,两个答案都猜测这是一个巧合。它不是。在实际表中,我使用这种方法将大约 90 条记录分成了大约 30 组,并且每条记录都按预期工作。 See for yourself.
【问题讨论】:
-
SQLite Release 3.7.11 On 2012-03-20: 查询形式:“SELECT max(x), y FROM table”返回包含最大x值的同一行中的y值。
-
参考相关source commits。