从多个表中select计数(*)
我如何从两个不同的表中selectcount(*)
(称为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
作为附加信息,要在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