274

結果として次count(*)の2つの異なるテーブル(とと呼びます)からtab1選択するにはどうすればよいですか?tab2

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
4

19 に答える 19

392
SELECT  (
        SELECT COUNT(*)
        FROM   tab1
        ) AS count1,
        (
        SELECT COUNT(*)
        FROM   tab2
        ) AS count2
FROM    dual
于 2009-03-03T12:39:19.360 に答える
52

わずかに異なるため、次のようになります。

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 行)。それ以外は、それほど違いはないと思います。パフォーマンスに関しては、同等であるべきだと思います。

于 2009-03-03T16:51:29.737 に答える
35

私の経験はSQL Serverですが、次のことができますか?

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

SQL Server では、あなたが求めている結果が得られます。

于 2009-03-03T12:45:31.387 に答える
13
    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
于 2017-06-02T22:07:27.550 に答える
13

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

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
/
于 2009-03-03T20:25:18.663 に答える
9

簡単な刺し傷が思いついた:

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

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

于 2009-03-03T12:41:10.760 に答える
9

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

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

次に、これを実行してカウントを取得できます。時々持っていると便利なスクリプトです。

于 2009-08-27T12:45:20.157 に答える
8

ここに私からの共有があります

オプション 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を楽しんでください、私はいつもそうしています:)

于 2009-07-31T04:56:49.587 に答える
7

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

于 2009-07-09T07:01:03.300 に答える
6
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
于 2009-03-03T12:39:54.817 に答える
5

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

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
)
于 2009-03-03T12:47:27.623 に答える
2
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all

また

SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
于 2016-08-03T19:14:06.743 に答える
0

JOIN with different tables

SELECT COUNT(*) FROM (  
SELECT DISTINCT table_a.ID  FROM table_a JOIN table_c ON table_a.ID  = table_c.ID   );
于 2015-08-16T05:35:20.020 に答える
-2
select @count = sum(data) from
(
select count(*)  as data from #tempregion
union 
select count(*)  as data from #tempmetro
union
select count(*)  as data from #tempcity
union
select count(*)  as data from #tempzips
) a
于 2011-06-24T10:46:03.227 に答える