次のクエリがあります。
select distinct profile_id from userprofile_...
union
select distinct profile_id from productions_...
結果の総数のカウントを取得するにはどうすればよいですか?
すべてのレコードの合計数が必要な場合は、次のようにします。
SELECT COUNT(*)
FROM
(
select distinct profile_id
from userprofile_...
union all
select distinct profile_id
from productions_...
) x
unionが明確にするため、両方のテーブルに等しい行がある場合はUnion All
を使用する必要があります
select count(*) from
(select distinct profile_id from userprofile_...
union ALL
select distinct profile_id from productions_...) x
この場合、両方のテーブルで同じProfile_Id
を取得した場合(idはおそらく数値なので、可能です)、Union
を使用した場合、両方でId = 1
を取得した場合tables
、1行失われます(2行ではなく1回表示されます)
これはかなりうまく機能します。
_select count(*) from (
select profile_id
from userprofile_...
union
select profile_id
from productions_...
) x
_
union
を使用すると、異なる値が保証されます-union
は重複を削除し、_union all
_はそれらを保持します。これは、distinct
キーワードが不要であることを意味します(他の回答はこの事実を利用せず、結果としてより多くの作業を行うことになります)。
両方のテーブルに表示される特定の値がdifferent値と見なされる場合、それぞれの異なるprofile_idの合計数を求める場合は、これを使用します。
_select sum(count) from (
select count(distinct profile_id) as count
from userprofile_...
union all
select count(distinct profile_id)
from productions_...
) x
_
データベースは、ユニオンリストからよりもはるかに高速にテーブル内の個別の値を効率的にカウントできるため、このクエリは他のすべての回答よりも優れています。 sum()
は、単に2つのカウントを加算します。
Omgポニーは、UNIONでdistinctを使用する方法がないことを既に指摘しているので、あなたの場合はUNION ALLを使用できます。
SELECT COUNT(*)
FROM
(
select distinct profile_id from userprofile_...
union all
select distinct profile_id from productions_...
) AS t1
COUNT(*)のいずれかで結果が0に等しい場合、これらは機能しません。
これは改善されます:
SELECT SUM(total) FROM ( select COUNT(distinct profile_id)AS total from userprofile _... union all COUNT(distinct profile_id)AS total from productions _... )x を選択します
最善の解決策は、2つのクエリ結果のカウントを追加することです。テーブルに多数のレコードが含まれていても問題はありません。また、ユニオンクエリを使用する必要はありません。例:
SELECT (select COUNT(distinct profile_id) from userprofile_...) +
(select COUNT(distinct profile_id) from productions_...) AS total