我有一个具有以下结构的表(这是一个简化版本,只是为了展示这个想法):
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
子句。