別のテーブルから値をもと総数と平均を探します

コンピュータユーザー:

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=279863&siteId=1