У меня есть следующий запрос:
select distinct profile_id from userprofile_...
union
select distinct profile_id from productions_...
Как получить счетчик общего количества результатов?
У меня есть следующий запрос:
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 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
, вы потеряете один ряд (он появится один раз вместо двух)
Это будет работать очень хорошо:
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()
просто добавляет два счета вместе.
Поскольку 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
Лучшее решение - добавить количество двух результатов запроса. Это не будет проблемой, если таблица содержит большое количество записей. И вам не нужно использовать запрос union. Пример:
SELECT (select COUNT(distinct profile_id) from userprofile_...) +
(select COUNT(distinct profile_id) from productions_...) AS total
Они не будут работать, если в одном из 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