如果想要查询某个字段的分组,并且把分组里最大值及其对应的记录信息查询出来,一般会用GROUP BY
和max
一块用,但是这里面有一个坑。
mysql> select * from test;
+----+-------+------+-------+
| id | name | age | class |
+----+-------+------+-------+
| 1 | qiu | 22 | 1 |
| 2 | liu | 42 | 1 |
| 4 | zheng | 20 | 2 |
| 3 | qian | 20 | 2 |
| 0 | wang | 11 | 3 |
| 6 | li | 33 | 3 |
+----+-------+------+-------+
6 rows in set (0.00 sec)
果想找到每个class里面的最大的age,则需要使用group by和max。
如下的sql语句,则输出结果有错误:
虽然找到的age是最大的age,但是与之匹配的用户信息却不是真实的信息,而是group by分组后的第一条记录的基本信息
mysql> select id,name,max(age),class from test group by class;
+----+-------+----------+-------+
| id | name | max(age) | class |
+----+-------+----------+-------+
| 1 | qiu | 42 | 1 |
| 4 | zheng | 20 | 2 |
| 0 | wang | 33 | 3 |
+----+-------+----------+-------+
3 rows in set (0.00 sec)
正确用法,用子查询:
select
bol.class ,
bol.aeg,
bol.name
from
(
select
t.class,
max(age) age
from
test t
group by
t.class ) as e
inner join test bol on
bol.id = e.id