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语句优化

Mysql group by 同类产品根据关系如果有的话

MySQL对数据表进行分组查询(GROUP BY)

mysql使用带有子查询的临时表,但不是group by和order by

MySQL 获取 ORDER BY 编号错误的行位置

MySQL GROUP BY 语句