/ / Як зробити підрахунок на запит об'єднання - mysql, sql, union, агрегат-функції

Як виконати розрахунок на об'єднаний запит - mysql, sql, union, aggregate-functions

У мене є такий запит:

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 від виробництв _... ) х