コンピュータユーザー:
MySQLで:
私は、顧客名(主キー)、都市やテーブルの金額を持っています:
表都市:
customer location amount
Cust1 New York, USA 200
Cust2 New York, USA 300
Cust3 Chicago, USA 100
Cust4 Paris, France 400
Cust5 Nice, France 500
Cust6 Milan, Italy 600
Cust7 Mumbai, India 0
この表のロケーション名の形式は次のとおりです。
<city>, <country>
と同じ:
<city><comma><space><country>
表国(主キー):
Name
USA
France
Italy
India
Thailand
私は、それぞれの国が持っているどのように多くの都市取得したい、とそれぞれの国の平均量。お気に入り:
Country Count Average
USA 3 200 // (200 + 300 + 100) / 3
France 2 450 // (400 + 500) / 2
Italy 1 600 // (600) / 1
India 1 0 // (0) / 1
Thailand 0 0 // 0
だから、私のクエリは次のとおりです。
SELECT t1.name Country, count(distinct t2.location) Count
FROM Country t1 LEFT JOIN Cities t2
ON t2.location LIKE concat('%, ', t1.name)
GROUP BY t1.name ORDER BY Count DESC
しかし、それは平均データを与えるものではありません、それだけで国の名前とカウントを与えます
GMB:
ここではそれを行うための一つの方法は次のとおりです。
select co.name, count(*) cnt, coalesce(avg(amount), 0) avg
from countries co
left join cities ci
on ci.location like concat('%, ', co.name)
group by co.name
order by co.name
あなたのデータを保存する方法は非効率的であることに注意してください。あなたがすべき:
二つの異なる列に国から都市名を区切ります
国テーブルの主キーを持っている、とcitiesテーブルにそれを参照
データセットの場合、これは次のようになります。
国
id | name
-- | ---------
1 | USA
2 | France
3 | Italy
4 | India
5 | Thailand
都市
id | customer | location | country_id | amount
-- | -------- | -------- | ---------- | ------
1 | Cust1 | New York | 1 | 200
2 | Cust2 | New York | 1 | 300
3 | Cust3 | Chicago | 1 | 100
4 | Cust4 | Paris | 2 | 400
5 | Cust5 | Nice | 2 | 500
6 | Cust6 | Milan | 3 | 600
7 | Cust7 | Mumbai | 4 | 0