- ベストアンサー
複数のテーブルの集計
あけましておめでとうございます。よろしくお願いします。例えばPHPを利用して二つの店舗で好きなブランドのアンケートを取りそれぞれテーブルに格納するとします。 tenpoa_tbl id,bland tenpob_tbl id,bland2 count(bland)とcount(bland2)の合計値をポイントが高い順に(たとえば店舗Aの順位が シャネル10 プラダ 6 グッチ 3 B店舗の順位が シャネル 8 ビトン 7 グッチ 2 合計がシャネル 18 ビトン 7 プラダ 6 グッチ 5 こんな感じで集計したいのですが分かる方いらしゃいますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MySQLで質問するときはバージョン情報をかきましょう。 動作がバージョンによってぜんぜん異なります。 古いバージョンではサブクエリーやunionは使えません。 その場合はテンポラリテーブルなどをつかって1度データを 統合して集計するといいでしょう。 create temporary table tmp select bland from tenpoa_tbl; insert into tmp select bland2 as bland from tenpob_tbl; select bland,count(*) as sum from tmp group by bland order by sum desc; メモリに余裕があればheapで処理する方が高速だと思います。
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
店舗毎に表を分ける意味があるのですか? 店舗コードか店舗名を、表の中に持てばいいのでは? そうすることで、合計は簡単に求められます。 店舗毎に表を分けるなら、仮に店舗数の増減があれば、SQLも変えることになりますよ? 店舗別に表を分けるなら、一店舗のブランド毎の合計を求めるSQLは、以下のようになります。 select bland,count(*) from ta group by bland order by 2 desc 仮に表を一つにし、店舗名を持つなら、以下のようなSQLになります。 select shop,bland,count(*) from t1 group by shop,bland order by 1,3 desc 一つのSQLで、結果を得たいという考えなのでしょうか? unionで結合する方法が考えられますが、ver 5.0では、unionとorder byを組み合わせた場合、バグがあるようで、下に結合した表のデータの並び替えが正しく行われないようです。 一表にした場合、合計を求めるのは、以下のようなSQLになります。 select bland,count(*) from t1 group by bland order by 2 desc
お礼
ありがとうございます。また宜しくお願いします。
お礼
ありがとうございます。また宜しくお願いします。