我有一张这样的桌子:
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();
您可以按顺序
使用窗口函数:
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