объединение нескольких столбцов в одном запросе - PullRequest
0 голосов
/ 03 марта 2020

Таблица A

+------------+--------------+--------------+
+  ID        +  Name        +   Company ID +
+------------+--------------+--------------+
+   1        +  Steve       +      1       +
+   2        +  Mile        +      2       +
+   3        +  Steve       +      2       +
+   4        +  Del Piero   +      2       +
+   5        +  Jack        +              +
============================+==============+

Таблица B

+------------+--------------+
+  ID        +  Company     +
+------------+--------------+
+   1        +  A           +
+   2        +  B           +
============================+

Что я хочу

+----------+------------+----------------+
+ # of id  +  # OF Name +  # of B Company+
+----------+------------+----------------+
+ 5        +  4         +  3             +
+========================================+

Я пробовал Union // Union All

SELECT count(id), count(name) FROM table A
UNION 
SELECT count(company) FROM table B where company = 'B'

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

Будут признательны за любые идеи

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Попробуйте это

SELECT count(id),
count(name),
(SELECT count(company) FROM table B where company)
FROM table A
0 голосов
/ 03 марта 2020

Вы можете объединить таблицы, чтобы восстановить название компании, связанное с каждой записью в tablea, а затем агрегировать:

select
    count(*) no_ids,
    count(distinct a.name) no_names,
    sum(b.comany = 'B') no_b_company
from tablea a
inner join tableb b on b.id = a.company_id

Предположительно, id является первичным ключом tablea, поэтому мы просто используйте count(*), чтобы суммировать этот столбец. no_names подсчитывает, сколько разных имен можно увидеть в соответствующем столбце, и sum(b.company = 'B') увеличивается на 1 каждый раз, когда видится компания B.

Если существует вероятность пропустить компании в tableb, Вы можете изменить inner join на left join.

...