MySql根据group by对查询的行进行编号
Posted
技术标签:
【中文标题】MySql根据group by对查询的行进行编号【英文标题】:MySql Numbering the rows of query based on group by 【发布时间】:2020-10-13 09:18:06 【问题描述】:我有一张这样的桌子
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 from people;
为我工作™
@Mono 。 . .我想你只想在查询结束时使用order by city, name
。
【参考方案1】:
你的代码应该做你想做的事——但是,你提到了group by
,这在这里无关紧要。查询应该是:
select name, city, row_number() over(partition by city order by name) - 1 rn
from mytable
【讨论】:
感谢您的帮助,我意识到我打错了,它确实有效。【参考方案2】:要获得您指定的结果:
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;
您似乎想要按城市名称数量排序的城市。
【讨论】:
以上是关于MySql根据group by对查询的行进行编号的主要内容,如果未能解决你的问题,请参考以下文章
mysql GROUP BY、DISTINCT、ORDER BY语句优化