数据库
首页 > 数据库> > mysql-为什么使用GROUP BY进行SQL查询会产生更多行?

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