Sab*_*ncu 4 mysql sql greatest-n-per-group
我有下表:
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询时:
SELECT id, MAX(rev) maxrev, content
FROM YourTable
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
我得到:
+------+----------+--------------------------------------+
| id | maxrev | content |
+------+----------+--------------------------------------+
| 1 | 3 | ... |
| 2 | 1 | ... |
+------+----------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除 GROUP BY 子句如下:
SELECT id, MAX(rev) maxrev, content
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)
我得到:
+------+----------+--------------------------------------+
| id | maxrev | content |
+------+----------+--------------------------------------+
| 1 | 3 | ... |
+------+----------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
这对我来说是违反直觉的,因为期望 GROUP BY 会通过消除重复值来减少结果数量。但是,在上述情况下,引入 GROUP BY 则相反。这是因为 MAX() 函数,如果是,如何?
PS:该表基于此处的 SO 问题:SQL select only rows with max value on a column。我试图理解这个问题的答案,在这个过程中,遇到了上述情况。
编辑:
我使用其 MySQL 5.6 引擎在 sqlfiddle.com 上获得了上述结果,没有自定义/配置。
它根据您的 GROUP BY 子句使用您的 MAX() 函数。因此,对于您的第一个查询,您是说:Give me the maximum rev for each id,而第二个只是说 Give me the maximum rev in general。
感谢 xQbert:
但这不意味着你所得到的排在后一种情况下,最大转速。它将从选择中的任何地方获取值用于您的 id 和内容字段。
您可以在此处阅读有关 SQL 如何处理 GROUP BY 语句的更多信息: 文档
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |