1

我实际上遇到了 MySQL 的问题,我需要 GROUP BY 的类似行为但没有分组。

这是一个只有一个名为“resident”的表的示例,其中包含 2 列:“name”、“city”。

如果我想计算每个城市的居民人数,我只需要这样做:

SELECT resident.city, count(resident.name) as 'Nb residents'
FROM resident
GROUP BY resident.city

所以结果会是这样的:

| city | Nb residents |
| NY   |       3      |
| HK   |       1      |
| Rome |       2      |
...

但我正在寻找一种方法来显示我的结果:

|   name   |  city  |  Nb residents |
| Name1    | NY     |       3       |
| Name2    | NY     |       3       |
| Name3    | NY     |       3       |
| Name4    | HK     |       1       |
| Name5    | Rome   |       2       |
| Name6    | Rome   |       2       |

有可能这样做吗?

谢谢你的帮助。

4

2 回答 2

3
SELECT resident.name, resident.city, (select count(a.name) from resident a where a.city = resident.city) as 'Nb residents'
FROM resident
于 2013-05-20T12:55:59.813 回答
2

您可以使用以下查询来做到这一点:

SELECT t1.`name`, t2.`city`, t3.`Nb residents`
FROM resident t1
JOIN ( SELECT resident.city, count(resident.name) as 'Nb residents' FROM resident GROUP BY resident.city ) t2
  ON t1.`city`= t2.`city`

这会在子查询中提取每个城市的居民数量,然后将其与该表的名称连接起来。

于 2013-05-20T12:50:06.913 回答