MySQL 5.6.25で開発テストしています。
###実現したいこと
ストアテーブル(Stores)と市区町村マスタ(Cities)があります。
市区町村毎にストア件数を取得しようとしています。
条件は、
・ストアテーブルCityIDの先頭2桁が「28」
・ストアテーブルPulishedが「1」
並び順は、
・市区町村マスタKanaの昇順。
###テーブル情報
■ストアテーブル(Stores)データ例
StoreID | Name | CityID | Pulished |
---|---|---|---|
1 | あいうえお店 | 281000 | 1 |
2 | かきくけこ店 | 281000 | 1 |
3 | さしすせそ店 | 282065 | 0 |
4 | たちつてと店 | 282022 | 1 |
- 2,000件程あります。
- 先頭2桁が「28」以外のデータもあります。
■市区町村マスタ(Cities)データ例
CityID | Name | Kana |
---|---|---|
281000 | 神戸市 | コウベシ |
282065 | 芦屋市 | アシヤシ |
282049 | 西宮市 | ニシノミヤシ |
282022 | 尼崎市 | アマガサキシ |
- 全国の市区町村マスタです。
- 1,900件弱あります。
- CityIDは必ず6桁です。
- CityIDの先頭2桁が「28」以外のデータもあります。
###取得したい結果
CityID | CityName | StoreCount |
---|---|---|
282065 | 芦屋市 | 0 |
282022 | 尼崎市 | 1 |
281000 | 神戸市 | 2 |
282049 | 西宮市 | 0 |
###試したSQL
sql
1SELECT 2 s.CityID AS CityID 3 ,c.Name AS CityName 4 ,( 5 CASE 6 WHEN s.CityID IS NULL THEN 0 7 ELSE COUNT(s.CityID) 8 END 9 ) AS StoreCount 10FROM 11 Stores AS s 12 LEFT OUTER JOIN 13 Cities AS c 14 ON c.CityID = s.CityID 15WHERE 16 SUBSTR(s.CityID, 1, 2) = '28' 17AND 18 s.Published = '1' 19GROUP BY 20 s.CityID 21ORDER BY 22 c.Kana 23;
###発生している問題
上記SQLでは0件の市区町村が表示されません。
WHERE句の「s.Published = '1'」を条件から除くと0件の市区町村が表示されますが、これではカウントしたくないストアも数えてしまうので意味がありません。
ご教授いただければ助かります。よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/25 03:18