【发布时间】:2013-06-25 08:22:29
【问题描述】:
我有一个结构如下的表(这是一个简化版本,只是为了展示想法):
name | city
------------------
John | New York
Thomas | Berlin
Hans | Berlin
Boris | Moscow
Boris | Moscow
Vasiliy | Moscow
我可以使用group by 获取每个城市的总人数,如下所示:
select count(*) from my_table group by city
但我需要更多一点,我无法理解它:我需要在同一个城市获取所有同名的人的数量,同时保持该城市的总人数。结果应该是这样的:
name | totalWithThisName | totalInThisCity | city
--------------------------------------------------------
John | 1 | 1 | New York
Thomas | 1 | 2 | Berlin
Hans | 1 | 2 | Berlin
Boris | 2 | 3 | Moscow
Vasiliy | 1 | 3 | Moscow
我知道我可以从 db 中获取原始数据,并在我的 java 程序中进行计算,但是用纯 SQL 进行计算会很棒。
更新:我正在使用mysql,但我不能使用over 子句。
【问题讨论】: