У мене є такий запит:
select distinct profile_id from userprofile_...
union
select distinct profile_id from productions_...
Як би я отримав підрахунок загальної кількості результатів?
Відповіді:
52 для відповіді № 1Якщо ви хочете загальний підрахунок усіх записів, ви зробите це:
SELECT COUNT(*)
FROM
(
select distinct profile_id
from userprofile_...
union all
select distinct profile_id
from productions_...
) x
14 за відповідь № 2
ви повинні використовувати Union All
якщо в обох таблицях є рівні рядки, тому що Union робить виразні
select count(*) from
(select distinct profile_id from userprofile_...
union ALL
select distinct profile_id from productions_...) x
У цьому випадку, якщо ви отримали те саме Profile_Id
в обох таблицях (імовірно, це число, імовірно, це число, тому це можливо), то якщо ви використовуєте Union
, якщо у вас є Id = 1
в обох tables
, ви втратите один рядок (він з’явиться один раз замість двох)
7 для відповіді № 3
Це буде добре:
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
Цей запит буде виконувати всі інші відповіді, оскільки база даних може ефективно підраховувати різні значення в таблиці набагато швидше, ніж зі списку об'єднаних. The sum()
просто додає два рахунки разом.
5 за відповідь № 4
Як omg поні вже вказувало на те, що використовувати UNION ВСЕ у вашому випадку немає жодного використання, ви можете використовувати UNION ALL у вашому випадку .....
SELECT COUNT(*)
FROM
(
select distinct profile_id from userprofile_...
union all
select distinct profile_id from productions_...
) AS t1
3 для відповіді № 5
Найкраще рішення - додати кількість результатів запитів. Це не буде проблемою, якщо таблиця містить велику кількість записів. І вам не потрібно використовувати запит об'єднання. Наприклад:
SELECT (select COUNT(distinct profile_id) from userprofile_...) +
(select COUNT(distinct profile_id) from productions_...) AS total
2 для відповіді № 6
Вони не працюватимуть, якщо в одному з COUNT (*) результат дорівнює 0.
Це буде краще:
ВИБІР СУМ (усього) ВІД ( виберіть COUNT (окремий профіль_id) AS AS від userprofile _... союз усіх виберіть COUNT (окремий профіль_id) AS AS від виробництв _... ) х