我有以下结构的表中多条记录(这是一个简化版本,只是为了显示这个想法):计数,同时保持一组
name | city
------------------
John | New York
German | Berlin
Gans | 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
German | 1 | 2 | Berlin
Gans | 1 | 2 | Berlin
Boris | 2 | 3 | Moscow
Vasiliy | 1 | 3 | Moscow
我知道我可以从数据库中取原始数据,并在我的java程序的计算,但是这将是巨大的,使其在一个普通的SQL。
更新:我使用的是mysql
,我不能使用over
子句。
这是非常相似: http://stackoverflow.com/questions/1503959/how-to-count-occurrences-of-a-column-value-efficiently- in-sql –