从多个表中select计数(*)

我如何从两个不同的表中selectcount(*) (称为tab1tab2 ),结果如下:

 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 

它给出的答案转置(每行一列而不是一列),否则我不认为这是很大的不同。 我认为在性能方面他们应该是相当的。

我的经验是与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 / 

这是从我分享

选项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”的同一个表的不同域计数到具有count的行

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

享受SQL,我总是这样做:)

 select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual; 

因为我看不到任何其他答案带来了。

如果你不喜欢子查询, 在每个表中有主键,你可以这样做:

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

但是,性能方面,我相信Quassnoi的解决scheme更好,我会使用。

一个急促的想法是:

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

注意:我在SQL Server中testing了这个,所以From Dual是不必要的(因此差异)。

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

如果表(或至less一个关键列)是相同的types只是先联合,然后计数。

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

或者把你的句子和另一个和()放在一起。

 select sum(amount) from ( select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2 ) 

为了一点完整性 – 这个查询将创build一个查询,给你一个给定所有者的所有表的计数。

 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 

然后你可以运行得到你的计数。 有时候这只是一个方便的脚本。

 --============= 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 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 

join不同的表格

 SELECT COUNT(*) FROM ( SELECT DISTINCT table_a.ID FROM table_a JOIN table_c ON table_a.ID = table_c.ID ); 
 Declare @all int SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2) Print @all 

要么

 SELECT (select COUNT(*) from tab1) + (select count(*) from tab2) 

select( 从tab1中selectcount( ),其中field如'value')+(从tab2中selectcount( ),其中field like'value')count

 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