3

次の構造のテーブルがあります(アイデアを示すための単純化されたバージョンです):

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

4

2 に答える 2

5

私がこれまでに行った解決策は、サブクエリを使用することjoinです。次のようになります。

select
    name,
    city,  
    count(*) as totalWithThisName,
    T.totalInThisCity
from 
    my_table 
    join (select
              count(*) as totalInThisCity,
              city
          from
              my_table
          group by city) T on my_table.city = T.city
group by 
    city, name;
于 2013-06-25T13:29:16.193 に答える