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がありましたら、教えていただきたいです。
どうぞよろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/09/08 03:33:33
  • 終了:2013/09/14 08:27:57
id:yayayai

所在都道府県のカラムには都道府県コードが入っています。
Excel+SQLiteです。

質問内容について訂正します。
誤り)都道府県→地域の順でかつ件数の昇順
正しい)で都道府県→地域の順でかつ件数の降順

>実際のテーブル名ならびにカラム名と、
>都道府県と地方を結びつけるための情報はどこにあるのかも教えてください。
<問い合わせTBL>
テーブル名:t_otoiawase
カラム名:todoufuken_cd

<都道府県TBL>
todoufuken_cd
todoufuken_name
chiki_cd

<地域TBL>
chiki_cd
chiki_name



>SQLを実行する前の段階でわかっているのはユーザー(コード?)だけですか?
>ユーザーの都道府県コードもすでにわかっているのですか?
SQLを実行する前には既に問い合わせTBLに登録されている
問い合わせ者の都道府県がわかっています。

>「都道府県別問い合わせ件数」は問い合わせ者TBLから集計するので良いですよね?

はい。OKです!

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492013/09/08 13:43:35

ポイント200pt

テスト環境が整わず 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
;
他3件のコメントを見る
id:yayayai

ありがとうございます!!!
検証させていただきます(^^ゞ

2013/09/08 19:15:48
id:yayayai
検証が遅くなってしまい失礼しました..> 素晴らしいです~!!ありがとうございました! 2013/09/14 08:27:35

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982013/09/08 08:10:48

ソート用のカラムを作って それでソートさせたほうが カンタンです。
レコード数もそんなにないと思いますので、こまかいソート順を設定できていいかと思いますよ。

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492013/09/08 13:43:35ここでベストアンサー

ポイント200pt

テスト環境が整わず 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
;
他3件のコメントを見る
id:yayayai

ありがとうございます!!!
検証させていただきます(^^ゞ

2013/09/08 19:15:48
id:yayayai
検証が遅くなってしまい失礼しました..> 素晴らしいです~!!ありがとうございました! 2013/09/14 08:27:35
  • id:windofjuly
    うぃんど 2013/09/08 04:33:38
    条件が色々不足してるので…。

    php+SQLite3で良いですか?Accessですか?MySQLですか?PostgreSQLですか?
    (Accessだと再起動して環境変えなきゃならないのでかなりあとになります…。)

    文章は昇順で、実例は降順ですが、どちらが正解ですか?

    実際のテーブル名ならびにカラム名と、
    都道府県と地方を結びつけるための情報はどこにあるのかも教えてください。
    (別途テーブルを作る必要があれば、用意してください)

    SQLを実行する前の段階でわかっているのはユーザー(コード?)だけですか?
    ユーザーの都道府県コードもすでにわかっているのですか?

    「都道府県別問い合わせ件数」は問い合わせ者TBLから集計するので良いですよね?

    まだ何か聞き漏らしが有るような無いような…。
  • id:windofjuly
    うぃんど 2013/09/08 05:12:28
    以前のVBA+ODBC+SQLiteですね…。

    効率良いのが浮かばないので、少々時間くださいね…。
  • id:taknt
    大阪 200
    京都 100
    和歌山 90
    岐阜 80

    というのは どういう順番なんでしょう?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません