MySQL 按两列排序



我有一个下表。

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 但无法获得所需的结果

尝试使用

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

DBfiddle 演示

您还可以使用窗口函数来获取每个名称的最大 id,并将它们用于排序目的。

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

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

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

最新更新