mysql-为什么使用GROUP BY进行SQL查询会产生更多行?
作者:互联网
我有下表:
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
当我运行以下查询时:
SELECT id, MAX(rev) maxrev, content
FROM YourTable
GROUP BY id;
我得到:
+------+----------+--------------------------------------+
| id | maxrev | content |
+------+----------+--------------------------------------+
| 1 | 3 | ... |
| 2 | 1 | ... |
+------+----------+--------------------------------------+
但是,如果我按如下所示删除GROUP BY子句:
SELECT id, MAX(rev) maxrev, content
FROM YourTable;
我得到:
+------+----------+--------------------------------------+
| id | maxrev | content |
+------+----------+--------------------------------------+
| 1 | 3 | ... |
+------+----------+--------------------------------------+
这与我的直觉相反,因为期望GROUP BY通过消除重复值来减少结果数量.但是,在上述情况下,引入GROUP BY则相反.这是由于MAX()函数引起的吗?
PS:该表基于此处的SO问题:SQL select only rows with max value on a column.我试图了解该问题的answer,在此过程中遇到了上述情况.
编辑:
我使用其MySQL 5.6引擎在sqlfiddle.com上获得了上述结果,没有进行任何自定义/配置.
解决方法:
它利用依赖于GROUP BY子句的MAX()函数.因此,对于您的第一个查询,您说的是:给我每个ID的最大转速,而第二个只是说给我一个最大转速.
感谢xQbert:
这并不意味着在后一种情况下,您将获得具有max rev的行.它将从选择的任何位置获取值,以用于您的id和content字段.
您可以在此处了解有关SQL如何处理GROUP BY语句的更多信息:Documentation
标签:greatest-n-per-group,sql,mysql 来源: https://codeday.me/bug/20191111/2017254.html