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