it-swarm.com.de

Anzahl (*) aus mehreren Tabellen auswählen

Wie kann ich count(*) aus zwei verschiedenen Tabellen auswählen (nennen Sie sie tab1 und tab2) und haben als Ergebnis:

Count_1   Count_2
123       456

Ich habe das probiert:

select count(*) Count_1 from schema.tab1 union all select count(*) Count_2 from schema.tab2

Aber alles was ich habe ist:

Count_1
123
456
192
user73118
SELECT  (
        SELECT COUNT(*)
        FROM   tab1
        ) AS count1,
        (
        SELECT COUNT(*)
        FROM   tab2
        ) AS count2
FROM    dual
276
Quassnoi

Um das gleiche in SQL Server zu erreichen, müssen Sie lediglich den "FROM dual" -Teil der Abfrage entfernen.

72
dincerm

Nur weil es etwas anders ist:

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

Es gibt die Antworten transponiert (eine Zeile pro Tabelle statt einer Spalte). Ich denke, die Leistung sollte gleichwertig sein.

30
Mike Woodhouse

Meine Erfahrung ist mit SQL Server, aber könnten Sie Folgendes tun:

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

In SQL Server erhalte ich das Ergebnis, nach dem Sie suchen.

23
Nic Wise

Andere etwas andere Methoden:

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
/
7
David Aldridge

Da ich keine andere Antwort sehen kann, rufen Sie dies auf.

Wenn Sie keine Unterabfragen mögen und Primärschlüssel in jeder Tabelle haben, können Sie Folgendes tun:

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

Aber in Bezug auf die Leistung glaube ich, dass die Lösung von Quassnoi besser ist als die, die ich verwenden würde.

6
Jimmy Stenke

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

6
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
5
Jens Schauder

Hier ist von mir zu teilen

Option 1 - Zählen aus derselben Domäne aus unterschiedlichen Tabellen

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain1.table2) "count2" 
from domain1.table1, domain1.table2;

Option 2 - Zählen aus einer anderen Domäne für dieselbe Tabelle

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain2.table1) "count2" 
from domain1.table1, domain2.table1;

Option 3 - Zählen aus einer anderen Domäne für dieselbe Tabelle mit "Alle vereinigen", um Zeilen mit Zählung zu erhalten

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

Genieße die SQL, die ich immer tue :)

5
Fadzil

Der Vollständigkeit halber wird bei dieser Abfrage eine Abfrage erstellt, in der Sie alle Tabellen für einen bestimmten Eigentümer zählen können. 

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;

Die Ausgabe ist so etwas 

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

Die können Sie dann laufen, um Ihre Punkte zu erhalten. Es ist nur ein praktisches Skript, um es manchmal zu haben.

4
Chris Gill

Ein kurzer Stich kam mit:

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

Hinweis: Ich habe dies in SQL Server getestet, daher ist From Dual nicht erforderlich (daher die Diskrepanz).

3
CJM
    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
3
Vikas Kumar

Wenn die Tabellen (oder zumindest eine Schlüsselspalte) vom selben Typ sind, erstellen Sie zuerst die Vereinigung und zählen Sie dann.

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

Oder nehmen Sie Ihr Sitzen und setzen Sie eine andere Summe () darum.

select sum(amount) from
(
select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2
)
1
Kay Marczinzik
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all

oder

SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
1
Rabby Hasan
--============= 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
1
Sheikh Kawser

VERBINDEN Sie mit verschiedenen Tischen

SELECT COUNT(*) FROM (  
SELECT DISTINCT table_a.ID  FROM table_a JOIN table_c ON table_a.ID  = table_c.ID   );
0
zloctb

wählen Sie (Wählen Sie count () aus tab1, wobei field wie 'value') + (Wählen Sie count () aus tab2, wobei field wie 'value') count

0
Cris