MySQL按两列排序

时间:2018-03-14 09:36:10

标签: mysql sql

我有下表。

id    name     data
1     DAN      xxxxxxxxx
2     ANTONY   xxxxxxxxx
3     DAN      xxxxxxxxx
4     DAN      xxxxxxxxx
5     JOSEPH   xxxxxxxxx
6     ANTONY   xxxxxxxxx
7     JOSEPH   xxxxxxxxx

我想首先使用ID对表进行排序,然后按名称分组。 例如

7    JOSEPH  xxxxxxxxx
5    JOSEPH  xxxxxxxxx
6    ANTONY  xxxxxxxxx
2    ANTONY  xxxxxxxxx
4    DAN     xxxxxxxxx
3    DAN     xxxxxxxxx
1    DAN     xxxxxxxxx

我尝试了ORDER BY的各种组合,并尝试了ORDER BY FIELD但无法获得所需的结果

3 个答案:

答案 0 :(得分:2)

尝试使用

select *, (select max(id) from tab t2 where t2.name = t1.name) m
from tab t1
order by m desc, id desc;

dbfiddle demo

答案 1 :(得分:0)

您还可以使用窗口功能获取每个名称的最大ID,并将其用于订购目的。

SELECT *,
        MAX(id) OVER(PARTITION BY name ORDER BY id DESC) Ord
FROM table t
ORDER BY Ord DESC

答案 2 :(得分:0)

您可以在order by中使用子查询,因此您可以将其表达为:

select t.*
from t
order by (select max(id) from t t2 where t2.name = t.name) desc, id desc;