2017-09-21 17 views
1

私のスキーマには2つのテーブルがあります - 住宅と都市。 COUNTとGROUP BYを使用して、各都市の住宅の数をどのように決定するのですか?複数のテーブルにCOUNTとGROUP BYを使用するには?

注:Houses.CityIDはCities.CityIDの外部キーです。おかげ

予想される出力:

City   Number of houses 
London  50000000 
NYC   30000000 
Tokyo  40000000 



SELECT CityName, count(*) as City 
FROM Cities 
GROUP BY CityName 
+0

ルックを試してみてください 'JOIN' https://www.w3schools.com/sql/sql_join.asp – zambonee

+0

すみませんが、あなたはどのように参加しますリンクがない場合は2つのテーブル?何か不足していますか? – Deepak

答えて

0

は市/ CityNameを介して2つのテーブルを結合するJOINを使用しました。 GROUP BYこの列も必要です。

SELECT t2.CityName, count(t1.*) 
FROM Houses t1 
JOIN Cities t2 
    ON t1.CityID = t2.CityID 
GROUP BY t1.City 

私は例が明白にするために、テーブルt1エイリアシング名前とt2を使用。

+0

こんにちはkixorz、私はt1とt2について混乱しています。 – novice

+0

t1とt2は、個々のテーブルにアクセスするために作成したエイリアス/名前です(これを抽出する際には完全なテーブル名を入力するよりも簡単です)Couch.CityNameとcount(Houses。*)の代わりに – Ben

+0

citiesテーブルに存在しないcityNameがある場合は注意が必要です。家の数が影響を受ける。さらに、データベースで大文字と小文字が区別される場合は、カウントにも影響が出る可能性があります。 – xQbert

0

PK &外部キーを使用すると、都市でCityIDが一意である必要があることがわかります CityIDは都市と1-Mであることを家で知っています。住宅のCityIDはCityに存在していなければなりません。したがって、スペルミス、異なるケーシングなどを心配する必要はありません。

したがって、名前を選択して参加をカウントします。 cityNameは一意ではないかもしれないので、C.CityIDをグループに追加します.2つのSpringfieldをマージする必要はありません。したがって、CityIDでグループ化する必要があります。

SELECT c.CityName, count(H.*) as Number_of_Houses 
FROM Cities C 
INNER JOIN Houses H 
on C.CityID = H.CityID 
GROUP BY C.CityID, C.CityName 
+0

こんにちは@xQbert。 2つのテーブルが外部キーにリンクされるように質問を更新しました。ありがとうございました! :) – novice

0

でこの

Select Cities.CityName, count(Houses.*) From Houses inner join Cities on Cities.CityName=Houses.City group by Houses.City

0
select cities.cityName, count(houseNumber) as NumberofHouses 
from Houses inner join cities on (houses.city = cities.cityName) 
group by cityname; 
関連する問題