2つの異なるテーブル(tab1
とtab2
と呼ぶ)から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
SELECT (
SELECT COUNT(*)
FROM tab1
) AS count1,
(
SELECT COUNT(*)
FROM tab2
) AS count2
FROM dual
追加情報として、SQL Serverで同じことを実行するには、クエリの "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で私はあなたがしている結果を得ます。
他のわずかに異なる方法:
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 count(distinct tab1.id) as count_t1,
count(distinct tab2.id) as count_t2
from tab1, tab2
しかし、パフォーマンス面では、Quassnoiのソリューションが優れていると考えています。
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
これが私からの共有です
オプション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
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
あなたはそれからあなたのカウントを得るために走ることができます。ときどき使うのは、便利なスクリプトです。
簡単な突き刺しが思いつきました:
Select (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2
注:SQL Serverでこれをテストしたので、From Dual
は必要ありません(したがって矛盾があります)。
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
テーブル(または少なくともキー列)が同じタイプのものである場合は、最初に共用体を作成してからカウントします。
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)
--============= 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
異なるテーブルと結合する
SELECT COUNT(*) FROM (
SELECT DISTINCT table_a.ID FROM table_a JOIN table_c ON table_a.ID = table_c.ID );
select(tab1からcount()、ここでfield
name__は 'value'のように)+(select count()はtab2からfield
name__、 'value'のように選択)