問い合わせ者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 ;
所在都道府県のカラムには都道府県コードが入っています。
Excel+SQLiteです。
質問内容について訂正します。
誤り)都道府県→地域の順でかつ件数の昇順
正しい)で都道府県→地域の順でかつ件数の降順
>実際のテーブル名ならびにカラム名と、
>都道府県と地方を結びつけるための情報はどこにあるのかも教えてください。
<問い合わせTBL>
テーブル名:t_otoiawase
カラム名:todoufuken_cd
<都道府県TBL>
todoufuken_cd
todoufuken_name
chiki_cd
<地域TBL>
chiki_cd
chiki_name
>SQLを実行する前の段階でわかっているのはユーザー(コード?)だけですか?
>ユーザーの都道府県コードもすでにわかっているのですか?
SQLを実行する前には既に問い合わせTBLに登録されている
問い合わせ者の都道府県がわかっています。
>「都道府県別問い合わせ件数」は問い合わせ者TBLから集計するので良いですよね?
はい。OKです!
ソート用のカラムを作って それでソートさせたほうが カンタンです。
レコード数もそんなにないと思いますので、こまかいソート順を設定できていいかと思いますよ。
php+SQLite3で良いですか?Accessですか?MySQLですか?PostgreSQLですか?
(Accessだと再起動して環境変えなきゃならないのでかなりあとになります…。)
文章は昇順で、実例は降順ですが、どちらが正解ですか?
実際のテーブル名ならびにカラム名と、
都道府県と地方を結びつけるための情報はどこにあるのかも教えてください。
(別途テーブルを作る必要があれば、用意してください)
SQLを実行する前の段階でわかっているのはユーザー(コード?)だけですか?
ユーザーの都道府県コードもすでにわかっているのですか?
「都道府県別問い合わせ件数」は問い合わせ者TBLから集計するので良いですよね?
まだ何か聞き漏らしが有るような無いような…。
効率良いのが浮かばないので、少々時間くださいね…。
京都 100
和歌山 90
岐阜 80
というのは どういう順番なんでしょう?