• ベストアンサー

複数のテーブルの集計

あけましておめでとうございます。よろしくお願いします。例えば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 こんな感じで集計したいのですが分かる方いらしゃいますか?   

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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で処理する方が高速だと思います。

uder1
質問者

お礼

ありがとうございます。また宜しくお願いします。

その他の回答 (1)

回答No.1

店舗毎に表を分ける意味があるのですか? 店舗コードか店舗名を、表の中に持てばいいのでは? そうすることで、合計は簡単に求められます。 店舗毎に表を分けるなら、仮に店舗数の増減があれば、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

uder1
質問者

お礼

ありがとうございます。また宜しくお願いします。

関連するQ&A