質問: sqlの質問です。 問い合わせ者TBLの中に、ユーザーの所在都道府県のカラムがあります。 それで、SQLで都道府県別問い合わせ件数を抽出した際に、 ユーザーの都道府県が、仮に東京だった場合は、 以下のような感じで都道府県→地域の順でかつ件数の昇順で表示される エリア 件数 東京、 200 神奈川、 130 千葉、 120 埼玉、 110 茨城、 50 群馬、 40 栃木、 30 東北地方 90 関西地方 180 中部地方 120 中国地方 100 北海道地方 80 九州地方 50 仮にユーザーの所在都道府県が大阪の場合は、 以下のような感じで都道府県→地域の順でかつ件数の昇順で表示される 大阪 200 京都 100 和歌山 90 岐阜 80 関東地方 130 中部地方 120 中国地方 100 北海道地方 80 九州地方 50 これを可能とするSQLがありましたら、教えていただきたいです。 どうぞよろしくお願い致します。
回答: テスト環境が整わず php + SQLite3 でテストしました...。 ***の部分はユーザーの都道府県コードを入れます。 ``` SELECT area_name, sum(c_otoiawase) AS c_otoiawase FROM ( SELECT CASE WHEN c.chiki_cd = d.chiki_cd THEN -1 ELSE c.chiki_cd END AS area_cd, CASE WHEN c.chiki_cd = d.chiki_cd THEN a.todoufuken_name ELSE c.chiki_name END AS area_name, b.c_otoiawase FROM t_todoufuken AS a LEFT JOIN ( SELECT todoufuken_cd, count(*) AS c_otoiawase FROM t_otoiawase GROUP BY todoufuken_cd ) AS b ON b.todoufuken_cd = a.todoufuken_cd LEFT JOIN t_chiki AS c ON c.chiki_cd = a.chiki_cd LEFT JOIN t_todoufuken AS d ON d.todoufuken_cd = *** ) AS x GROUP BY area_cd, area_name ORDER BY area_cd, sum(c_otoiawase) DESC ; ```