Подтвердить что ты не робот

Как выполнить подсчет по запросу объединения

У меня есть следующий запрос:

select distinct profile_id from userprofile_...

union

select distinct profile_id from productions_...

Как получить счетчик общего количества результатов?

4b9b3361

Ответ 1

Если вам нужен общий счет для всех записей, вы должны сделать это:

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

    union all

    select distinct profile_id 
    from productions_...
) x

Ответ 2

вы должны использовать Union All, если в обеих таблицах есть равные строки, потому что Union делает отдельный

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, вы потеряете один ряд (он появится один раз вместо двух)

Ответ 3

Это будет работать очень хорошо:

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

Использование union гарантирует отличные значения - union удаляет дубликаты, union all сохраняет их. Это означает, что вам не нужно ключевое слово distinct (другие ответы не используют этот факт и в конечном итоге делают больше работы).

Отредактировано:

Если вы хотите общее количество разных профилей в каждом, где заданные значения, отображаемые в обеих таблицах, считаются разными значениями, используйте это:

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

Этот запрос будет выполнять все остальные ответы, поскольку база данных может эффективно подсчитывать различные значения в таблице намного быстрее, чем из объединенного списка. sum() просто добавляет два счета вместе.

Ответ 4

Поскольку omg ponies уже указывали, что использовать UNION с использованием UNION невозможно, вы можете использовать UNION ALL в вашем случае.....

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

Ответ 5

Лучшее решение - добавить количество двух результатов запроса. Это не будет проблемой, если таблица содержит большое количество записей. И вам не нужно использовать запрос union. Пример:

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

Ответ 6

Они не будут работать, если в одном из COUNT (*) результат равен 0.

Это будет лучше:

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