提问者:小点点

按计数排序相同值


我有一张这样的桌子:

ID |  Name  |  Group   

1    Mary      1    

2    Rose      1

3    Rose      2

4    Bob       2

5    Bob       2

我想按组排序,然后按count(名称)排序,然后按rand()排序,结果如下:

ID |  Name  |  Group   

4    Bob       2

5    Bob       2

3    Rose      2

2    Rose      1

1    Mary      1    

我写了这个查询,但是如果我在group和rand之间添加count(Name),它会给我一个坏结果

SELECT * FROM table ORDER BY Group DESC, RAND();

共1个答案

匿名用户

您可以按顺序使用窗口函数:

order by count(*) over (partition by name) desc,
         name

注意:这不会按名称随机化。如果你真的想这样:

order by count(*) over (partition by name) desc,
         min(rand()) over (partition by name),
         name

在早期版本中,可以使用子查询:

order by (select count(*) from t t2 where t2.name = t.name) desc,
         name