web-dev-qa-db-ja.com

複数の表から数(*)を選択

2つの異なるテーブル(tab1tab2と呼ぶ)からcount(*)を選択するにはどうすればいいですか?

Count_1   Count_2
123       456

私はこれを試してみました:

select count(*) Count_1 from schema.tab1 union all select count(*) Count_2 from schema.tab2

しかし、私が持っているのは以下のとおりです。

Count_1
123
456
195
user73118
SELECT  (
        SELECT COUNT(*)
        FROM   tab1
        ) AS count1,
        (
        SELECT COUNT(*)
        FROM   tab2
        ) AS count2
FROM    dual
282
Quassnoi

追加情報として、SQL Serverで同じことを実行するには、クエリの "FROM dual"部分を削除するだけです。

73
dincerm

少し違うからといって、

SELECT 'table_1' AS table_name, COUNT(*) FROM table_1
UNION
SELECT 'table_2' AS table_name, COUNT(*) FROM table_2
UNION
SELECT 'table_3' AS table_name, COUNT(*) FROM table_3

それは転置された答えを与えます(1つの列の代わりにテーブルごとに1つの行)。性能的には同等であるべきだと思います。

30
Mike Woodhouse

私の経験はSQL Serverですが、できますか。

select (select count(*) from table1) as count1,
  (select count(*) from table2) as count2

SQL Serverで私はあなたがしている結果を得ます。

23
Nic Wise

他のわずかに異なる方法:

with t1_count as (select count(*) c1 from t1),
     t2_count as (select count(*) c2 from t2)
select c1,
       c2
from   t1_count,
       t2_count
/

select c1,
       c2
from   (select count(*) c1 from t1) t1_count,
       (select count(*) c2 from t2) t2_count
/
8
David Aldridge

他の答えが見当たらないのでこれを思い出してください。

もしあなたがサブクエリを好きではないそしてそれぞれのテーブルに主キーを持っているならこれを行うことができます:

select count(distinct tab1.id) as count_t1,
       count(distinct tab2.id) as count_t2
    from tab1, tab2

しかし、パフォーマンス面では、Quassnoiのソリューションが優れていると考えています。

6
Jimmy Stenke
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
5
Jens Schauder

これが私からの共有です

オプション1 - 異なるテーブルの同じドメインから数える

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain1.table2) "count2" 
from domain1.table1, domain1.table2;

オプション2 - 同じテーブルの異なるドメインから数える

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain2.table1) "count2" 
from domain1.table1, domain2.table1;

オプション3 - "union all"を使用して同じテーブルの異なるドメインから数えて行数を数える

select 'domain 1'"domain", count(*) 
from domain1.table1 
union all 
select 'domain 2', count(*) 
from domain2.table1;

SQLを楽しんでください、私はいつもします:)

5
Fadzil

SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual;

5

完全を期すために - このクエリでは、特定の所有者のすべてのテーブルの数を数えるためのクエリを作成します。

select 
  DECODE(rownum, 1, '', ' UNION ALL ') || 
  'SELECT ''' || table_name || ''' AS TABLE_NAME, COUNT(*) ' ||
  ' FROM ' || table_name  as query_string 
 from all_tables 
where owner = :owner;

出力は次のようになります。

SELECT 'TAB1' AS TABLE_NAME, COUNT(*) FROM TAB1
 UNION ALL SELECT 'TAB2' AS TABLE_NAME, COUNT(*) FROM TAB2
 UNION ALL SELECT 'TAB3' AS TABLE_NAME, COUNT(*) FROM TAB3
 UNION ALL SELECT 'TAB4' AS TABLE_NAME, COUNT(*) FROM TAB4

あなたはそれからあなたのカウントを得るために走ることができます。ときどき使うのは、便利なスクリプトです。

4
Chris Gill

簡単な突き刺しが思いつきました:

Select (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2

注:SQL Serverでこれをテストしたので、From Dualは必要ありません(したがって矛盾があります)。

3
CJM
    select 
    t1.Count_1,t2.Count_2
    from 
(SELECT count(1) as Count_1 FROM tab1) as t1, 
(SELECT count(1) as Count_2 FROM tab2) as t2
3
Vikas Kumar

テーブル(または少なくともキー列)が同じタイプのものである場合は、最初に共用体を作成してからカウントします。

select count(*) 
  from (select tab1key as key from schema.tab1 
        union all 
        select tab2key as key from schema.tab2
       )

またはあなたの声明を取り、それについて別のsum()を置く。

select sum(amount) from
(
select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2
)
1
Kay Marczinzik
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all

または

SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
1
Rabby Hasan
--============= FIRST WAY (Shows as Multiple Row) ===============
SELECT 'tblProducts' [TableName], COUNT(P.Id) [RowCount] FROM tblProducts P
UNION ALL
SELECT 'tblProductSales' [TableName], COUNT(S.Id) [RowCount] FROM tblProductSales S


--============== SECOND WAY (Shows in a Single Row) =============
SELECT  
(SELECT COUNT(Id) FROM   tblProducts) AS ProductCount,
(SELECT COUNT(Id) FROM   tblProductSales) AS SalesCount
1
Sheikh Kawser

異なるテーブルと結合する

SELECT COUNT(*) FROM (  
SELECT DISTINCT table_a.ID  FROM table_a JOIN table_c ON table_a.ID  = table_c.ID   );
0
zloctb

select(tab1からcount()、ここでfieldname__は 'value'のように)+(select count()はtab2からfieldname__、 'value'のように選択)

0
Cris