varias unir una tablas tabla sola relacionadas misma hacer diferentes consultas consultar consulta como mysql sql union aggregate-functions

mysql - unir - Cómo hacer una cuenta en una consulta de unión



unir dos tablas sql server (6)

Tengo la siguiente consulta:

select distinct profile_id from userprofile_... union select distinct profile_id from productions_...

¿Cómo obtendría el recuento del número total de resultados?


Como omg ponies ya ha señalado que no se usa el uso distinto de UNION, puedes usar UNION ALL en tu caso ...

SELECT COUNT(*) FROM ( select distinct profile_id from userprofile_... union all select distinct profile_id from productions_... ) AS t1


Debería usar Union All si hay filas iguales en ambas tablas, porque Union hace un distintivo

select count(*) from (select distinct profile_id from userprofile_... union ALL select distinct profile_id from productions_...) x

En este caso, si obtuvo un mismo Profile_Id de Profile_Id en ambas tablas (id es probablemente un número, entonces es posible), si usa Union , si obtuvo Id = 1 en ambas tables , perderá una fila (aparecerá una vez en lugar de dos


Esto funcionará bastante bien:

select count(*) from ( select profile_id from userprofile_... union select profile_id from productions_... ) x

El uso de la union garantiza valores distintos: la union elimina duplicados y la union all preserva. Esto significa que no necesita la palabra clave distinct (las otras respuestas no explotan este hecho y terminan haciendo más trabajo).

Editado:

Si desea calcular el número total de profile_id diferentes en cada uno, donde los valores dados que aparecen en ambas tablas se consideran valores diferentes , use esto:

select sum(count) from ( select count(distinct profile_id) as count from userprofile_... union all select count(distinct profile_id) from productions_... ) x

Esta consulta superará todas las demás respuestas, ya que la base de datos puede contar de manera eficiente distintos valores dentro de una tabla mucho más rápido que en la lista unida. La sum() simplemente suma las dos cuentas juntas.


Estos no funcionarán si en uno de los COUNT (*) el resultado es igual a 0.

Esto será mejor:

SELECT SUM(total) FROM ( select COUNT(distinct profile_id) AS total from userprofile_... union all select COUNT(distinct profile_id) AS total from productions_... ) x


La mejor solución es agregar la cuenta de dos resultados de la consulta. No será un problema si la tabla contiene un gran número de registros. Y no es necesario utilizar la consulta de unión. Ex:

SELECT (select COUNT(distinct profile_id) from userprofile_...) + (select COUNT(distinct profile_id) from productions_...) AS total


Si desea un recuento total para todos los registros, debería hacer esto:

SELECT COUNT(*) FROM ( select distinct profile_id from userprofile_... union all select distinct profile_id from productions_... ) x