- ベストアンサー
SELECT/別テーブルのレコード数も取得したい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私が思いついたのは、結合して GROUP BY を使う方法とSELECT句内のサブクエリを使う方法でした。 version 5.5.8 で確認しました。 ■ 結合して GROUP BY を使う方法 SELECT a.id, COUNT(b.A_id) AS count FROM table_a a LEFT OUTER JOIN table_b b ON(a.id = b.A_id) GROUP BY a.id; ■ SELECT句内のスカラサブクエリを使う方法 SELECT id, (SELECT COUNT(*) FROM table_b b WHERE a.id = b.A_id) AS count FROM table_a a;
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
先に全体のSQL文を書いたけど、あちこちに別名を使っています。 集計関数CountにもB_countと付けてます。予約語と同じはイヤなので。
お礼
補足ありがとうございます。 >集計関数CountにもB_countと付けてます。予約語と同じはイヤなので ・確かに関数Countと被っていますね ・質問した時点では、全く気が付きませんでした ・参考になりましたー
- bin-chan
- ベストアンサー率33% (1403/4213)
Select t1.*, t2.B_count From テーブルA t1 left join ( Select A_id, count(*) B_count from テーブルB ) t2 On t1.id = t2.A_id ;
お礼
回答ありがとうございました。 参考になりましたー
関連するQ&A
- 一番新しいdatetime型列があるレコードを取得
下記条件を満たすSQL文を知りたいのですが、どう書けばよいでしょうか? ■構成 Aテーブル ・「id」カラム ・「created_at」カラム … datetime型 ・「area」カラム Bテーブル ・「a_id」カラム ・「created_at」カラム … datetime型 ■前提 ・Aテーブルの1レコード(「id」カラム)に対して、0~複数のBテーブルレコード(「a_idカラム」)がある ・A.id = B.a_id ■欲しい内容 ・「Aテーブル」「Bテーブル」それぞれのカラム内容全部。※条件あり ▼条件1 Aテーブル「id」カラムに対応したBテーブルの「a_id」が複数ある場合には、該当Aテーブル内容+ Bテーブル「created_at」カラムの値が一番新しいレコードを返す(取得レコード数は常に1) ▼条件2 Aテーブル「id」カラムに対応したBテーブルの「a_id」がなかった場合には、該当Aテーブル内容+ Bテーブル側は何も返さない ▼条件3 ※同名カラムを取得する際には、カラム名先頭にそれぞれa、bを付与(「acreated_at」「bcreated_at」) ・後で、それぞれのテーブルカラムとして利用したいだけなので、それが出来れば形式にこだわりはありません
- ベストアンサー
- MySQL
- 2つのテーブルでの合計取得
環境:Mysql4.1.19 次のようなAテーブルとBテーブルのキーごとのレコードカウントを取得したいのですが、どのようなSQL文を作ればよいのでしょうか? Aテーブル ID Hiduke 005 2006-10-1 006 2006-10-3 001 2006-10-1 005 2006-10-6 005 2006-10-1 Bテーブル ID Hiduke 006 2006-11-1 006 2006-11-3 001 2006-11-1 003 2006-11-6 005 2006-11-1 から、次のような結果を得たい。 005 4 006 3 001 2 003 1 以上です。初心者ですが、よろしくお願いします。
- ベストアンサー
- MySQL
- レコード数の取得について
A B C --------- 1 10 001 1 10 005 1 10 009 1 20 001 1 20 002 1 20 004 1 20 007 のようなテーブルがあって、SQL文で集計し、 count 3 count 4 というように、値を出したいのですが、 どういうsql文を書けばよいでしょうか? アドバイスお願いします。
- ベストアンサー
- Oracle
- 順番に並んだ各レコードの、前後のレコードと結合
質問です。mysqlのTBLテーブルの同じカラムに 1 3 7 10 11 という数字データのレコードが入っています。 この時 3 1 7 3 10 7 11 10 と、それぞれのレコード(左)よりひとつ小さな数のレコード(右)を 並べて取得するSQL文はどう書けばいいのでしょうか? よろしくおねがいします。
- ベストアンサー
- MySQL
- 2つのテーブルのデータまとめて取得したい
SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。
- ベストアンサー
- SQL Server
- 関連テーブルのレコード数の取得
SQL初心者です 関連テーブルのレコード数を取得したいのですがうまくいきません テーブル名:user user_id,user_name 1,aaa 2,bbb 3,ccc テーブル名:user_agreements user_id,money 1,5000 2,3000 2,5000 1,8000 2,4500 3,10000 3,2500 上記のようなデータがあった場合に、ユーザーIDと契約件数という結果を得たいと思っています user_id,sum_agreements 1,2 2,3 3,2 このような結果を得る為のSQL文はどのように書けば宜しいでしょうか 宜しくお願い致します
- ベストアンサー
- その他(データベース)
- MySQLで別テーブルを参照し、レコードを消したい
お世話になります。MySQL4のデータベース上に2つのテーブルがあるのですが、 片方のテーブル(a)にあるフィールド(b_id)の値を参照し、もう片方のテーブル(b)のレコードを消していきたいのです。 具体的には以下のようなテーブル(a)とテーブル(b)があります。 TBL: a =========================== id b_id category =========================== 0 1 3 --------------------------- 1 2 1 --------------------------- 2 3 2 --------------------------- 3 4 2 --------------------------- TBL: b =========================== id name price =========================== 0 goodsA 1,000 --------------------------- 1 goodsB 500 --------------------------- 2 goodsC 250 --------------------------- 3 goodsD 2,500 --------------------------- 4 goodsE 1,800 --------------------------- やりたいことは、テーブル(a)の「category」フィールドが「2」以外であれば、 そのレコードの「b_id」にある数値を「id」にもつ、テーブル(b)のレコードを消していきたいのです。 上記の例だと、テーブル(a)のid「0」と「1」がcategoryに「2」以外を持っています。 この2つのレコードのb_idは「1」と「2」ですので、テーブル(b)のid「1」と「2」を消したいと思っています。 SQLについて知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。
- 締切済み
- MySQL
- GROUP_CONCAT✕複数列で、違うレコード数
MySQLで、「GROUP_CONCAT」を「複数列」に適用させ、それぞれ異なるレコードを1つにまとめようとしたのですが、 取得出来る結果が、多い方の数に引き連られてしまいます。 ざっくりとした質問でアレなのですが、これは結合の仕方が悪い、 と推測されるでしょうか? そもそも「GROUP_CONCAT」を複数列に適用させる場合、それぞれ異なるレコード数をまとまることはできるのでしょうか?。 ■期待した取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows [テーブルBカラムf] => man ■実際の取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows,windows [テーブルBカラムf] => man,man 「テーブルB」の取得結果が、「テーブルA」取得結果数に引き連られてしまいます ■SQL(抜粋) SELECT GROUP_CONCAT(a.c) AS c, GROUP_CONCAT(a.d) AS d, GROUP_CONCAT(b.e) AS e, GROUP_CONCAT(b.f) AS f FROM hoge h LEFT JOIN テーブルA a ON (h.id = a.hoge_id) LEFT JOIN テーブルB b ON (h.id = b.hoge_id)
- 締切済み
- MySQL
- 別テーブルのカラムを利用してソートしたい
別テーブルのカラムを利用してソートしたい MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」のcountというカラムを利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 「tbl2」のidというカラムは外部キーで「tbl1」のidと関係しています。 テーブル「tbl1」 +------+---------+ | id | userid | +------+---------+ | 1 | tanaka | | 2 | sato | +------+---------+ テーブル「tbl2」 +------+---------+ | id | count | +------+---------+ | 1 | 10 | | 2 | 3 | +------+---------+ 次のような文かなと思ったのですが、エラーが返ってきます・・・ SELECT * FROM tbl1 ORDER BY (SELECT id FROM tbl2 ORDER BY count)
- ベストアンサー
- MySQL
お礼
回答ありがとうございました。 何となく色々な書き方が出来るんだろうな、とは思っていたのですが、 実際に違うやり方で書かれたコードを確認することが出来たので、とても勉強になりましたー