- 締切済み
ソートについて
従業員名前テーブル + 従業員住所テーブル 同じ県住所が多いとこから表示させたいのですが・・。 仮:北海道20人 東京100人 大阪70人の場合 SQL結果 佐藤 東京都港区 田中 東京都港区 山田 東京都港区 山下 東京都新宿区 ・ ・ ・ 遠藤 大阪府大阪市 ・ ・ 清水 北海道札幌市 のような結果が欲しいのですが 説明が下手かもしれませんが、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1416)
従業員名前テーブル(ID、氏名) 従業員住所テーブル(ID、都道府県、住所) 以上のように仮定すると、IDで結合し、都道府県でGROUP化した時に 件数の降順でソートするということになります。 先ず、都道府県別の人数を求めるクエリを考えます。 SELECT A.都道府県,COUNT(B.ID) AS 件数 FROM 従業員住所テーブル A,従業員名前テーブル B WHERE A.ID=B.ID GROUP BY A.都道府県 次に、このクエリと従業員住所テーブル、従業員名前テーブルを結合します。 SELECT C.氏名,B.住所 FROM (SELECT A.都道府県,COUNT(B.ID) AS 件数 FROM 従業員住所テーブル A,従業員名前テーブル B WHERE A.ID=B.ID GROUP BY A.都道府県) A, 従業員住所テーブル B,従業員名前テーブル C WHERE A.都道府県=B.都道府県 AND B.ID=C.ID ORDER BY A.件数 DESC 但し、上記のようなサブクエリが使えるのはVersion 4.1以上です。
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンは何ですか? せっかく具体的なSQLを提示しても、amd64さんの環境では動かないかも知れません。 > 従業員名前テーブル + 従業員住所テーブル 従業員の名前と住所を管理するテーブルを、別に作る必要があるのでしょうか? 従業員名をある決まった順序で表示させるなら、従業員番号等の主キーが必要になります。 住所も、都道府県名とそれ以降で、列を分けた方がいいと思います。 仮に以下のような列構成の表を作るとします。 表=t1 id・・・従業員番号 name・・・社員名 pref_name・・・都道府県名 そうすると、次のようなSQL例が思い浮かびます。 select t1.* from t1, (select pref_name,count(*) as cnt from t1 group by pref_name) as x where t1.pref_name=x.pref_name order by cnt desc,id
- Tasuke22
- ベストアンサー率33% (1799/5383)
それぞれの県ので作業用のテーブルに抜き出して、 件数を調べて多い順に結合ですか。 SQL文一発では無理でしょう。 プログラムが必要と思います。多分。