MySql根据group by对查询行进行编号
我有一张这样的桌子MySql根据group by对查询行进行编号,mysql,sql,window-functions,Mysql,Sql,Window Functions,我有一张这样的桌子 id name city ------------------------------- 1 Ian London 2 John London 3 David New York 4 Sylvia Mumbai 5 Beryl New York 6
id name city
-------------------------------
1 Ian London
2 John London
3 David New York
4 Sylvia Mumbai
5 Beryl New York
6 Rashan London
我想检索按城市分组的行编号的数据。像这样
name city count
-------------------------------
Ian London 0
John London 1
Rashan London 2
Beryl New York 0
David New York 1
Sylvia Mumbai 0
我一直在尝试
ROW_NUMBER() OVER (PARTITION BY City ORDER BY name)-1
但是计数是返回的所有项目,我想在这里计数每个城市的人数。您的代码应该做您想做的事情-但是,您提到了
分组方式
,这与此处无关。查询应该是:
select name, city, row_number() over(partition by city order by name) - 1 rn
from mytable
要获得指定的结果,请执行以下操作:
select name, city, row_number() over (partition by city, order by name) as count
from t
order by count(*) over (partition by city) desc, -- number of rows in city
city,
name;
您似乎希望城市按城市名称的数量排序。您的代码应该满足您的要求。请向我们展示您的整个查询。
选择姓名、城市、行号()(按城市划分,按姓名排序)-1从人代码>对我有用™@单。我想你只需要在查询结束时按城市、姓名排序。谢谢你的帮助,我意识到我打错了,它确实有效。