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 条评论