unir tablas relacionadas hacer ejemplos diferentes datos consultas consultar consulta complejas como sql oracle count

relacionadas - unir 3 tablas sql



Seleccionar recuento(*) de varias tablas (18)

¿Cómo puedo seleccionar count(*) desde dos tablas diferentes (llamarlas tab1 y tab2 ) teniendo como resultado:

Count_1 Count_2 123 456

He intentado esto:

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

Pero todo lo que tengo es:

Count_1 123 456


ÚNASE con diferentes tablas

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


Aquí está de mí para compartir

Opción 1: contar desde el mismo dominio desde una tabla diferente

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

Opción 2: contar desde diferentes dominios para la misma tabla

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

Opción 3: contando desde diferentes dominios para la misma tabla con "union all" para tener filas de conteo

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

Disfruta el SQL, siempre lo hago :)


Como información adicional, para lograr lo mismo en SQL Server, solo necesita eliminar la parte "FROM dual" de la consulta.


Como no puedo ver ninguna otra respuesta, menciona esto.

Si no le gustan las subconsultas y tiene claves principales en cada tabla, puede hacer esto:

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

Pero en cuanto al rendimiento, creo que la solución de Quassnoi es mejor, y la que usaría.


Mi experiencia es con SQL Server, pero podría hacer:

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

En SQL Server obtengo el resultado que buscas.


Otros métodos ligeramente diferentes:

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 /


Para un poco de integridad, esta consulta creará una consulta para darle un recuento de todas las tablas para un propietario determinado.

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;

La salida es algo así como

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

Que luego puedes ejecutar para obtener tus conteos. Es solo un guión útil para tener a veces.


Si las tablas (o al menos una columna de clave) son del mismo tipo, solo haga primero la unión y luego cuente.

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

O tome su satement y ponga otra suma () a su alrededor.

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


Solo porque es un poco diferente:

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

Da las respuestas transpuestas (una fila por tabla en lugar de una columna), de lo contrario, no creo que sea muy diferente. Creo que desde el punto de vista del rendimiento deberían ser equivalentes.


Una puñalada rápida se le ocurrió:

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

Nota: Probé esto en SQL Server, por lo que From Dual no es necesario (de ahí la discrepancia).


select (seleccione count ( ) de tab1 donde field como ''value'') + (select count ( ) de tab2 donde field como ''valor'' cuenta


SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) 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


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


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)


SELECT ( SELECT COUNT(*) FROM tab1 ) AS count1, ( SELECT COUNT(*) FROM tab2 ) AS count2 FROM dual


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


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