Come posso selezionare count(*)
da due tabelle diverse (chiamiamole tab1
e tab2
) avendo come risultato:
Count_1 Count_2 123 456
Ho provato questo:
select count(*) Count_1 from schema.tab1 union all select count(*) Count_2 from schema.tab2
Ma tutto ciò che ho è:
Count_1 123 456
SELECT ( SELECT COUNT(*) FROM tab1 ) AS count1, ( SELECT COUNT(*) FROM tab2 ) AS count2 FROM dual
Come informazioni aggiuntive, per realizzare la stessa cosa in SQL Server, è sufficiente rimuovere la parte “FROM duale” della query.
Solo perché è leggermente diverso:
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
Dà le risposte trasposte (una riga per tabella invece di una colonna), altrimenti non penso sia molto diverso. Penso che le prestazioni dovrebbero essere equivalenti.
La mia esperienza è con SQL Server, ma potresti fare:
select (select count(*) from table1) as count1, (select count(*) from table2) as count2
In SQL Server ottengo il risultato desiderato.
Altri metodi leggermente diversi:
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 /
Poiché non riesco a vedere nessuna altra risposta, porta questo.
Se non ti piacciono le sotto-query e hai le chiavi primarie in ogni tabella puoi farlo:
select count(distinct tab1.id) as count_t1, count(distinct tab2.id) as count_t2 from tab1, tab2
Ma per quanto riguarda le prestazioni, credo che la soluzione di Quassnoi sia migliore e quella che userei.
Ecco da parte mia da condividere
Opzione 1: conteggio dallo stesso dominio da una tabella diversa
select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain1.table2) "count2" from domain1.table1, domain1.table2;
Opzione 2: conteggio da domini diversi per la stessa tabella
select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain2.table1) "count2" from domain1.table1, domain2.table1;
Opzione 3: contare da domini diversi per la stessa tabella con “unione tutti” per avere righe di conteggio
select 'domain 1'"domain", count(*) from domain1.table1 union all select 'domain 2', count(*) from domain2.table1;
Goditi l’SQL, lo faccio sempre 🙂
select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual;
Una pugnalata rapida si avvicinò con:
Select (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2
Nota: ho provato questo in SQL Server, quindi From Dual
non è necessario (da qui la discrepanza).
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
Se le tabelle (o almeno una colonna chiave) sono dello stesso tipo, fai prima l’unione e poi conta.
select count(*) from (select tab1key as key from schema.tab1 union all select tab2key as key from schema.tab2 )
Oppure prendi la tua affermazione e metti un’altra sum () attorno ad essa.
select sum(amount) from ( select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2 )
Per un po ‘di completezza – questa query creerà una query per darti un conteggio di tutte le tabelle per un determinato proprietario.
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;
L’output è qualcosa di simile
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
Che puoi quindi eseguire per ottenere i tuoi conteggi. È solo un comodo script da avere a volte a volte.
Declare @all int SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2) Print @all
o
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
ISCRIVITI a tavoli diversi
SELECT COUNT(*) FROM ( SELECT DISTINCT table_a.ID FROM table_a JOIN table_c ON table_a.ID = table_c.ID );
seleziona (seleziona count ( ) da tab1 dove field
come ‘value’) + (seleziona count ( ) da tab2 dove field
come ‘valore’) conta
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