sql组内排序

发现一个奇技淫巧,MySQL 用 group by 分组后如果 select * 那么获得的是哪一条数据?

貌似是 from 子句中顺序的第一条语句,如果 from 子句中对表中按某字段排序,那么最终就可以达到选出分组极值的效果。

譬如对于如下表

mysql> select * from test order by dt desc;
+------+-----------+----------+
| id   | followers | dt       |
+------+-----------+----------+
| 2    | 15        | 20160729 |
| 1    | 9         | 20160726 |
| 2    | 8         | 20160726 |
| 1    | 11        | 20160725 |
+------+-----------+----------+
4 rows in set (0.00 sec)

想选出“每个id的dt最大的一条数据”。

mysql> select * from (select * from test order by dt desc) as A group by A.id;
+------+-----------+----------+
| id   | followers | dt       |
+------+-----------+----------+
| 1    | 9         | 20160726 |
| 2    | 15        | 20160729 |
+------+-----------+----------+

2 rows in set (0.00 sec)

当然这只是 MySQL 如此。其他 sql 譬如 HQL 就不支持在分组语句中 select *。

共有 0 条评论

发表评论

电子邮件地址不会被公开。