- ベストアンサー
関連テーブルのレコード数を取得する方法
- SQL初心者でも簡単に関連テーブルのレコード数を取得する方法をご紹介します。
- 具体的なテーブルのデータを例に、ユーザーIDと契約件数を取得するSQL文の書き方を解説します。
- 関連テーブルのレコード数を取得するためには、GROUP BY句を使い、SUM関数を利用します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
適正なインデックスがあれば特にスピードは変わらないと思いますが? //元データ create table user(user_id int,user_name varchar(20),index(user_id,user_name)); insert into user values(1,'aaa'),(2,'bbb'),(3,'ccc'); create table user_agreements(user_id int ,money int,index(user_id,money)); insert into user_agreements values(1,5000),(2,3000),(2,5000),(1,8000),(2,4500),(3,10000),(3,2500); //例1 select user_id,count(money) as money,user_name from user inner join user_agreements using(user_id) group by user_id; //例2 select user_id,(select count(money) as money from user_agreements where user_id=t1.user_id) as money,user_name from user as t1; //例3 select user_id, money,user_name from user as t1 inner join (select user_id,count(money) as money from user_agreements group by user_id) as t2 using(user_id); 例1と例2はほぼ同じ、例3は若干効率が悪いかもしれません
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>例えばuser_name等やここでは省略したカラムを表示したい じゃこんな感じで select user_id,count(money),user_name from user inner join user_agreements using(user_id) group by user_id
お礼
ありがとうございます、無事取得出来ました ちなみにinnner joinは遅いから使わない方がいいという話を聞いたことがあるのですが、他に取得方法はあるのでしょうか? もしご存知でしたら教えて頂けませんでしょうか 何卒宜しくお願い致します
補足
なぜかお礼が私の画面で表示されないので補足に書いておきます もしちゃんと見えていたらすみません ~以下お礼~ ありがとうございます、無事取得出来ました ちなみにinnner joinは遅いから使わない方がいいという話を聞いたことがあるのですが、他に取得方法はあるのでしょうか? もしご存知でしたら教えて頂けませんでしょうか 何卒宜しくお願い致します 投稿日時-2013-10-23 20:20:28
- yambejp
- ベストアンサー率51% (3827/7415)
単純に考えれば select user_id,count(money) from user_agreements group by user_id だけでよいのでは? ただしuserテーブルとリンクしたいならサブクエリを利用することになります たとえばuserテーブルにid=4がいてuser_agreementsには存在しない場合 id=4に対して0やNULLを得たい場合などです。 サブクエリについてはSQLの種別によって微妙に書き方が違うかもしれませんので どのSQLをベースに考えているか提示した方がよいと思います
お礼
ありがとうございます すみません、大事な部分を書き忘れてしまいましたが、仰るように「userテーブルとリンクしたい」のです 例えばuser_name等やここでは省略したカラムを表示したいのです データベースはmysqlを使っているのですが、どのように記載すれば宜しいでしょうか 宜しくお願い致します
お礼
ありがとうございます! 帰り次第3パターン試してみようと思います 色々教えてくださり、本当にありがとうございました