J'ai la requête suivante:
select distinct profile_id from userprofile_...
union
select distinct profile_id from productions_...
Comment puis-je obtenir le décompte du nombre total de résultats?
Si vous voulez un nombre total pour tous les enregistrements, vous feriez ceci:
SELECT COUNT(*)
FROM
(
select distinct profile_id
from userprofile_...
union all
select distinct profile_id
from productions_...
) x
tu devrais utiliser Union All
s'il y a des lignes égales dans les deux tables, car Union fait une distinction
select count(*) from
(select distinct profile_id from userprofile_...
union ALL
select distinct profile_id from productions_...) x
Dans ce cas, si vous avez le même Profile_Id
dans les deux tables (id est probablement un nombre, donc c'est possible), alors si vous utilisez Union
, si vous avez Id = 1
dans les deux tables
, vous perdrez une ligne (elle apparaîtra une fois au lieu de deux)
Cela fonctionnera plutôt bien:
select count(*) from (
select profile_id
from userprofile_...
union
select profile_id
from productions_...
) x
L'utilisation de union
garantit des valeurs distinctes - union
supprime les doublons, union all
Les conserve. Cela signifie que vous n'avez pas besoin du mot clé distinct
(les autres réponses n'exploitent pas ce fait et finissent par faire plus de travail).
Si vous souhaitez totaliser le nombre de différents profile_id dans chacun, où les valeurs données qui apparaissent dans les deux tableaux sont considérées comme différentes, utilisez ceci:
select sum(count) from (
select count(distinct profile_id) as count
from userprofile_...
union all
select count(distinct profile_id)
from productions_...
) x
Cette requête surpassera toutes les autres réponses, car la base de données peut compter efficacement des valeurs distinctes dans une table beaucoup plus rapidement que dans la liste unifiée. La sum()
additionne simplement les deux nombres ensemble.
Comme omg poneys a déjà souligné qu'il n'est pas utile d'utiliser distinct avec UNION, vous pouvez utiliser UNION ALL dans votre cas .....
SELECT COUNT(*)
FROM
(
select distinct profile_id from userprofile_...
union all
select distinct profile_id from productions_...
) AS t1
Ceux-ci ne fonctionneront pas si dans l'un des COUNT (*) le résultat est égal à 0.
Ça sera mieux:
SELECT SUM (total) FROM ( Select COUNT (distinct profile_id) AS total From userprofile _... union tout sélectionner COUNT (distinct profile_id) COMME total parmi les productions _... ) x
La meilleure solution consiste à ajouter le nombre de deux résultats de requête. Ce ne sera pas un problème si la table contient un grand nombre d'enregistrements. Et vous n'avez pas besoin d'utiliser la requête d'union. Ex:
SELECT (select COUNT(distinct profile_id) from userprofile_...) +
(select COUNT(distinct profile_id) from productions_...) AS total