結果として次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
SELECT (
SELECT COUNT(*)
FROM tab1
) AS count1,
(
SELECT COUNT(*)
FROM tab2
) AS count2
FROM dual
わずかに異なるため、次のようになります。
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 行)。それ以外は、それほど違いはないと思います。パフォーマンスに関しては、同等であるべきだと思います。
私の経験はSQL Serverですが、次のことができますか?
select (select count(*) from table1) as count1,
(select count(*) from table2) as count2
SQL Server では、あなたが求めている結果が得られます。
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
その他のわずかに異なる方法:
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
/
簡単な刺し傷が思いついた:
Select (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2
注:これはSQL ServerでテストしたFrom Dual
ので、必要ありません(したがって、不一致があります)。
完全を期すために、このクエリはクエリを作成して、特定の所有者のすべてのテーブルの数を取得します。
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
次に、これを実行してカウントを取得できます。時々持っていると便利なスクリプトです。
ここに私からの共有があります
オプション 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を楽しんでください、私はいつもそうしています:)
SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual;
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
テーブル (または少なくともキー列) が同じタイプである場合は、最初にユニオンを作成してからカウントします。
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
)
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all
また
SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
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 );
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