• ベストアンサー

複数のテーブルの集計

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

  • uder1
  • お礼率38% (23/59)
  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • 客観的によりハイブランドな順を教えてください。

    客観的によりハイブランドな順を教えてください。 シャネル、プラダ、ジミーチュウ、ディオール、サンローラン、ジバンシィ、ヴィトン、グッチ、コーチ、アルマーニ、フェラガモ、エルメス よろしくお願い致しますm(_ _)m

  • 複数テーブルの集計その2

    お世話になります。 先日テーブルの集計について教えていただき、下記集計結果を取得することができたのですが、 新たに自由形50~平泳ぎ50までの合計を追加したいのです。(一人で4種目参加する場合は4と数える) テーブル1 AreaID   AreaName --------------------- 1 北海道 2 東北 テーブル3 ID AreaID   Name  Item1   Item2  Item3 Item4 --------------------------------------------------------- 1   2    鈴木    2    1    4     3 2   1    田中    1    2    null   null 3   2    伊藤    3    null   2    4  「集計結果」       参加人数 自由形50 自由形100 背泳ぎ50 平泳ぎ50  追加部分 --------------------------------------------------------------- 北海道     1     1       1      0      0       2 東北      2     1       2      2      2       7   $sql="select AreaName, count(distinct ID) 参加人数, count(case when Item=1 then 1 else null end) as 自由形50, ・・・略 from t1 as x left join (select ID,AreaID,1 as Item from t3 where Item1=1 or Item2=1 or Item3=1 or Item4=1 union all select ID,AreaID,2 as Item from t3 where Item1=2 or Item2=2 or Item3=2 or Item4=2 ) as y on x.AreaID=y.AreaID group by AreaName order by x.AreaID というようにおしえていただきました。 null以外を取得するSQLをカウントとselectに追加すればいいのかと思い試したのですが期待した値を取得できません。 count(case when Item=AAA then 1 else null end) as abc,と union all select ID,AreaID,AAA as Item from テーブル3 where ItemID1<>'' or ItemID2<>'' or ItemID3<>'' or ItemID4<>'' or (ItemID1<>'' and ItemID2<>'') ・・・ バージョンはMySQL4.1.18です。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • ブランドのなれはては

    グッチ、プラダとかシャネルなんかはsaleをやってるのを見かけるのですが、ヴィトンやエルメスはsaleはやりません。 こういうブランド品のものってシーズンが過ぎるとどうなるんでしょう。 この手のブランド品ってsaleでも売りさばけない場合、どうなっちゃうんでしょう。

  • あのブランドが楽器?!

    エルメスやヴィトン、グッチ、シャネル、プラダなどのブランドの中には、 過去、楽器を販売したことがあるブランドがあると聞きました。 それは具体的には何を販売し、その期間はどれぐらいだったのでしょうか?

  • アンケート結果を集計するSQLを教えて下さい

    アンケート結果を集計する効率の良いシンプルなSQLを教えて下さい。 MySQLで、以下の状態です。 テーブル名:hoge カラム:id,kbn id...auto kbn...1~5 欲しい結果は、以下の状態です。 順位,kbn,count 1位,5,60ポイント 2位,3,45ポイント 2位,1,45ポイント 4位,4,30ポイント 5位,2,10ポイント ※位やポイントはプログラム側で付与するので不要です。 2位の様に同点の場合は同じ順位を表示し、3位を飛ばし順位を表示させたく思います。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 高額ブランド

    世界レベルの有名ブランドの高額?の順位はヴィトン=シャネル>グッチ=エルメス>コーチ=プラダ=カルティエ という風に認識しています。 このような順位に詳しい方もしいらっしゃったら訂正してください!他のブランドが入っててもかまいません。ディオールなど あと男性ファッションブランドでは ナンバーナイン>アンダーカバーイズム>ハリウッド>APE だと認識しています。こちらのほうもアドバイスください!

  • イタリア、フランスでのブランド品

    近々初ヨーロッパです。イタリア、フランスでのブランド品は、日本よりどのくらい安いのでしょうか?また、免税店と路面店、どちらで購入する方がお得でしょうか?気になるブランドは、ヴィトン、シャネル、プラダ、グッチなどです。初心者の質問ですが、お願いします。

  • 大量データの集計を早くするには?

    データベース初心者です。よろしくお願いします。 mysql5.0で何種類かのアンケートをつくり、 ブランドのアンケートであれば年齢階層(ラジオボタン)やブランド(複数可のチェックボタン)、 車のアンケートであれば、年齢階層(ラジオボタン)や車種(複数可のチェックボタン)の好み などを取りテーブルに格納しています。 そしてその結果は、1種類のテーブル(アンケート種別やアンケート設問がラジオかチェックかの区別)に 格納しています。 そして、20歳が何人、グッチの好みの人が何人と質問項目毎に集計しようとしています。 しかし、アンケート件数が非常に膨大(例えば1億件)となったとき、 時間がかかるのではないかと心配しています。 良い、テーブル構成とか、DBアクセスの仕方などありますでしょうか? テーブル構造は アンケート番号(キー) 質問番号(キー) 質問種別(ラジオかチェックボックスか) 回答 ユーザーID よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 女性向けの財布を探しています。

    私は21歳の女子学生です。 新しい財布がほしくなったのですが、なかなかいい物が見つからず困っています。 3年間使う予定なので2~3万円台を予算に考えています。 シャネルやヴィトンですと予算オーバーになってしまいますし、友達と被る可能性もあります。 また、デザインもあまり好きではありません。 他にもピンキー&ダイアンやコーチ、グッチ、フェンディ、プラダなども見てみましたが好みのものがありませんでした。 私くらいの年代の女性に合うような財布(できれば2~3万円台くらい)がありましたら是非教えていただきたいと存じます。

  • 他テーブルの集計結果を別テーブルのカラムに格納

    新規テーブル作成時にあるカラムに別のテーブルの集計結果を入れることはできるのでしょうか? 例えば、商品を定義したテーブルの中に、その商品が合計いくつ売れているかを集計するカラムを設置し、常に発注テーブルからその商品の合計発注数を引っ張って来て格納するイメージです。 テーブル作成時のみ集計するではなく、常に参照し動きがあれば数値が自動で変わるようになる方法を探しています。 いちいちselectで集計しなくても始めからカラムに集計値が入っていれば楽だなぁと思い質問しました。 どなたかわかる方いらっしゃいましたらよろしくお願いします。 商品テーブル CREATE TABLE product ( product_no SERIAL NOT NULL, (商品id) product_name VARCHAR(200) NOT NULL, (商品名) product_price VARCHAR(20) NOT NULL, (料金) product_sum INTEGER, (合計発注数)←ここ PRIMARY KEY(product_no) ); 発注テーブル CREATE TABLE order ( order_no SERIAL NOT NULL, (発注id) product_no INTEGER NOT NULL REFERENCES product(product_no) ON UPDATE CASCADE ON DELETE CASCADE,(商品id) order_num INTEGER NOT NULL,(その商品の発注数) order_date TIMESTAMP,(発注日) PRIMARY KEY(order_no) );