MySQL:複数テーブルの行数取得方法
- 複数テーブルの総行数(count値)を一括で取得する方法についてご教授ください。
- 現在、テーブルA、テーブルB、テーブルCの行数を別々に取得していますが、一度に取得する方法があるか教えてください。
- MySQLのバージョンは5.5です。総行数を一発で取得するための効率的なSQL文を教えてください。
- ベストアンサー
MySQL: 複数テーブルのcount
複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA union all select COUNT(*) AS 列ID from テーブルB union all select COUNT(*) AS 列ID from テーブルC; 【出力結果】 +-----+ | 列_ID | +-----+ | 1 | ←テーブルAの合計:行数 | 2 | ←テーブルBの合計:行数 | 3 | ←テーブルCの合計:行数 +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。
- MySQL
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか? select (select count(*) from テーブルA)+(select count(*) from テーブルB)+(select count(*) from テーブルC) AS 列ID
その他の回答 (1)
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
前に SELECT SUM(列ID) FROM ( 後に )AS T を付加しても出来ます。
お礼
回答ありがとうございます。 SUM関数を使うやり方をいろいろ調べておりましたが 結局わからずじまいで質問させていただきました。 こんなに簡単な方法だったとは・・・ 勉強になりました。
関連するQ&A
- 複数テーブルにわたるCOUNT
複数のテーブルで検索条件が当てはまった行を検索し、 その総行数を得たいのですが、 以下のSQL文ではあさっての数値が出てしまいます。 構文が間違っているのでしょうか。 (MySQLを使っています) SELECT Count(*) FROM テーブル1,テーブル2,テーブル3 WHERE (テーブル1.列1 Like 検索文字 or テーブル2.列2 Like 検索文字 or テーブル3.列2 Like 検索文字; どなたか教えてください。よろしくお願いします。
- ベストアンサー
- MySQL
- Mysql サブクエリの使い方
table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。
- ベストアンサー
- MySQL
- 複数JOINしているとCOUNTが正しく取得できな
LAMP環境で開発をしています。 SQL文でCOUNTを求める際に、まとめて結果を求めようとして上手く行きません。 状況としては以下です。 テーブルdはidをkeyにa,b,c3つのテーブルとjoinしています。 id = 1の場合、テーブルa,b,cにマッチするレコードがそれぞれに4個、1個、0個あります。 ひとつひとつを SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count FROM d INNER JOIN a ON a.id = d.id WHERE d.id = 1 として結果を求めると4,1,0と出るのですが、まとめて SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count, COUNT(CASE WHEN b.name IS null THEN 1 ELSE null END) as b_count, COUNT(CASE WHEN c.name IS null THEN 1 ELSE null END) as c_count FROM d INNER JOIN a ON a.id = d.id INNER JOIN b ON b.id = d.id INNER JOIN c ON c.id = d.id WHERE d.id = 1 とすると28,5,0という値が返されます。 どのように書けば正しい4,1,0を得られるのでしょうか? よろしくお願いします。
- ベストアンサー
- MySQL
- UNION ALLしたテーブルを個別に並べ変え
table1、table2、table3というテーブルがあり このそれぞれをidというカラムで並び替えたものを結合するので考えました。 SELECT * FROM `table1` UNION ALL SELECT * FROM `table2` UNION ALL SELECT * FROM `table3` ORDER BY `id` にすると全てを結合したものを並び替えるので SELECT *, '1' AS tbl FROM `table1` UNION ALL SELECT *, '2' AS tbl FROM `table2` UNION ALL SELECT *, '3' AS tbl FROM `table3` ORDER BY `tbl`,`id` という風に書いてみました、結果としてはよさそうですが 方法としては間違ってないでしょうか? 他にいい方法があればアドバイスをお願いします。
- 締切済み
- MySQL
- 複数(2つ)のテーブルで検索を行いたい
MySQL 3.23です。 select count(*) as hit from freedata where (A=10 or B=10); という構文と select count(*) as hit from sharedata where A=10; という構文を一行にしたOR検索を行いたいのですが、方法はありますか? 要は、同一のキーワードで、二つのテーブルを検索対象にしたいのです。ご教授よろしくお願い致します。
- ベストアンサー
- MySQL
- 複数テーブルの集計その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
- UNIONする際、片方テーブルしかないカラムも利用
UNIONする際、片方のテーブルしかないカラムも利用したいのですが、どうすればよいでしょうか? ■現状 SELECT tablename, id, level FROM ( SELECT \'A\' tablename, s.id, s.level FROM A s UNION ALL SELECT \'B\' tablename, r.group_id, r.level FROM B r ) as UNI ■やりたいこと ・テーブルAにしかないカラム「age」も一緒にSELECTしたいのですが、どうすれば良いでしょうか? ・UNIONしたいわけではなく、UNIONした後のレコード同様、「age」カラムもSELECTしたい、という意味です ・UNIONの外側で何かやればいいのかな、と思い試したのですが、うまくいきませんでした
- ベストアンサー
- MySQL
- 【MySQL5.7】IDごとの最頻値
お世話になります。MySQLでidごとの最頻値を抽出しているのですが、 select id, hantei,count(*) as ModeCount from member a group by id,hantei having count(*) >= all(select count(*) from member b where b.id=a.id group by hantei asc) order by id,hantei レコード数は5000件ほどなのですが現在の方法では10.485sと時間がかかりすぎて困っています。MySQLでは最頻値を出すのにサブクエリを使うしかないのでしょうか? こうすればもっと速くなるよって方法があれば教えてください。お願いします。
- ベストアンサー
- MySQL
- php sqlite count 列数取得
php5 apache2 sqlite xpの環境で、指定したテーブルをcountして行数ではなく、列数を取得したいのですが、調べても見つけることができなかったためご教授御願いします。 A B C 2 4 6 1 3 4 行でしたら select count(*) from tbl_a で「2」が取得できるのですが、「3」の列を取得したいのです。
- ベストアンサー
- PHP
お礼
早々の回答ありがとうございます。 とてもシンプルな内容だったんですね! 助かりました。