45

I have the following query:

select distinct profile_id from userprofile_...

union

select distinct profile_id from productions_...

How would I get the count of the total number of results?

4

6 に答える 6

79

すべてのレコードの合計数が必要な場合は、次のようにします。

SELECT COUNT(*)
FROM
(
    select distinct profile_id 
    from userprofile_...

    union all

    select distinct profile_id 
    from productions_...
) x
于 2012-07-31T00:47:06.267 に答える
21

Union All両方のテーブルに等しい行がある場合に使用する必要があります。

select count(*) from 
(select distinct profile_id from userprofile_...

union ALL

select distinct profile_id from productions_...) x

この場合、Profile_Id両方のテーブルで同じ値を取得した場合 (id はおそらく数字なので可能です)、 を使用すると、両方でUnion取得した場合、1 つの行が失われます (2 つではなく 1 回表示されます)。Id = 1tables

于 2012-07-31T00:48:19.590 に答える
9

これはかなりうまく機能します:

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

を使用すると、union異なる値が保証されます -union重複が削除され、union all保存されます。これは、キーワードが必要ないことを意味しますdistinct(他の回答はこの事実を利用せず、より多くの作業を行うことになります)。

編集:

両方のテーブルに表示される特定の値が異なる値と見なされる場合に、それぞれの異なる 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 つのカウントを加算します。

于 2012-07-31T01:08:33.683 に答える
6

COUNT(*) のいずれかで結果が 0 の場合、これらは機能しません。

これはより良いでしょう:

SELECT SUM(合計)
から
(
    合計として COUNT(distinct profile_id) を選択
    userprofile_ から...

    ユニオンオール

    合計として COUNT(distinct profile_id) を選択
    from productions_...
) バツ
于 2015-09-03T13:38:58.673 に答える
5

omg ponies が既に UNION との明確な使用の使用がないことを指摘しているように、あなたのケースでは UNION ALL を使用することができます.....

SELECT COUNT(*) 
FROM 
( 
select distinct profile_id from userprofile_...
union all
select distinct profile_id from productions_...
) AS t1 
于 2012-07-31T00:48:08.200 に答える
4

最善の解決策は、2 つのクエリ結果のカウントを追加することです。テーブルに多数のレコードが含まれていても問題ありません。また、ユニオン クエリを使用する必要はありません。元:

SELECT (select COUNT(distinct profile_id) from userprofile_...) + 
(select COUNT(distinct profile_id) from productions_...) AS total
于 2014-09-24T09:45:02.057 に答える