Выберите количество различных значений в mysql - PullRequest
0 голосов
/ 16 января 2020

У меня есть две таблицы, A и B, структурированные следующим образом.

CREATE TABLE TableA (
  `id` INTEGER,
  `code` VARCHAR(1),
  `type` VARCHAR(1)
);

INSERT INTO TableA
  (`id`, `code`, `type`)
VALUES
  ('1', 'A', 'r'),
  ('2', 'A', 'o'),
  ('3', 'A', 'u'),
  ('4', 'B', 'h');

CREATE TABLE TableB (
  `id` INTEGER,
  `sid` INTEGER,
  `code` VARCHAR(1)
);

INSERT INTO TableB
  (`id`, `sid`, `code`)
VALUES
  ('1', '1', 'A'),
  ('1', '1', 'A'),
  ('1', '1', 'A'),
  ('2', '1', 'B'),
  ('2', '1', 'B'),
  ('1', '2', 'A'),
  ('1', '2', 'A'),
  ('2', '2', 'A');

результат этого запроса должен быть таким:

sid      r     o     u
1        3     2     0
2        2     1     0

таблица A имеет внешний ключ из таблицы B, который является идентификатором. я хочу узнать, сколько раз каждый sid обращался к каждому типу таблицы A.

1 Ответ

3 голосов
/ 16 января 2020

Соединение слева таблицы B с таблицей A и совокупность:

select b.sid,
  sum(a.type = 'r') r,
  sum(a.type = 'o') o,
  sum(a.type = 'u') u
from TableB b left join TableA a
on b.id = a.id
group by b.sid

См. Демоверсию . Результаты:

| sid | r   | o   | u   |
| --- | --- | --- | --- |
| 1   | 3   | 2   | 0   |
| 2   | 2   | 1   | 0   |
...