Объединение таблиц и получение количества заданных c записей - PullRequest
0 голосов
/ 05 мая 2020

У меня есть две таблицы, например table_a и table_b со следующей структурой.

table_a : ID (первичный ключ), value_one

table_b : ID, value_two

Обратите внимание, что id в table_b не является основным и содержит несколько записей с одним и тем же идентификатором.

теперь мне нужна третья таблица, которая отображает запись для каждого идентификатора в table_a со столбцами, равными

id column_count

столбец _count будет отображать количество записей (количество) в table_b со значением_two = 'c'. и я хочу повторить это для всех записей table_a.

Например, скажем, наш table_a выглядит так:

id   value_one
1   20
2   40
3   50

table_b

id value_two
1   10
1   20
1   10
2   40
2   10
3   40
3   10

Мне нужны записи с value_two = 10, чтобы моя новая таблица выглядела как

id   count
1   2
2   1
3   1

Так как id 1 имеет две записи с value_two = 10, а id 2 и id 3 имеют одну записать каждый с value_two = 10

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Один из способов сделать это использует коррелированный подзапрос:

select a.id,
       (select count(*) from table_b b where b.id = a.id and b.value_two = 10) as cnt_10
from table_a a;

Другой метод использует left join:

select a.id, count(b.id)
from table_a a left join
     table_b b
     on b.id = a.id and b.value_two = 10
group by a.id;

В данных вашего примера это работает:

select b.id, count(*)
from table_b b
where b.value_two = 10
group by b.id;

Это эквивалентно при следующих обстоятельствах:

  • Все идентификаторы в a находятся в b.
  • Все идентификаторы имеют по крайней мере одно значение 10.

Если эти два условия верны, используйте этот более простой запрос.

1 голос
/ 05 мая 2020

Вы можете выполнить условную агрегацию:

select id, sum(value_two = 10) as count
from table_b tb
group by id;

Если вы хотите сопоставить id s, добавьте INNER JOIN. Это покажет 0 count, тогда как value_two = 10 не найдено. Вы можете добавить предложение where, чтобы найти только value_two = 10 count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...