MYSQL: подсчет количества строк в одной таблице на основе объединения двух других таблиц - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть три таблицы: записи, учреждения и доктора.Вот минимальный пример данных таблицы:

ЗАПИСИ

| keyid  | doctorid | 
---------------------
|  1     |    23    |
|  2     |    13    | 
|  3     |    23    | 
|  4     |    13    | 
|  5     |    23    |
|  6     |    42    | 
|  7     |    5     | 

УЧРЕЖДЕНИЕ

| name   |
----------
|  One   |
|  Two   |
|  Three |
|  Four  |
|  Five  |
|  Six   |

ДОКТОРЫ

| uid      |   inst   | 
-----------------------
|  23      |    Three |
|  13      |    Six   | 
|  3       |    Four  | 
|  42      |    Six   | 
|  5       |    One   |

Что мне нужнознаю, количество записей, которые я имею для каждого учреждения.Однако учреждения связаны с записями через таблицу DOCTORS.Таким образом, результат в этом случае должен дать мне это:

РЕЗУЛЬТАТЫ

| name     | count |
--------------------
| One      |  1    |
| Two      |  0    |
| Three    |  3    |
| Four     |  0    |
| Five     |  0    |
| Six      |  3    |

Я понятия не имею, как даже начать писать этот запрос.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 февраля 2019

Эту проблему можно решить с помощью агрегированного запроса, который объединяет все три таблицы, например:

SELECT
    i.name,
    COALESCE(COUNT(e.keyid), 0) cnt
FROM
    institution i
    LEFT JOIN doctors d ON d.inst = i.name
    LEFT JOIN entries e ON e.doctorid = d.uid
GROUP BY i.name

Используя ваши образцы данных, эта демонстрация на DB Fiddle возвращает:

| name  | cnt |
| ----- | --- |
| One   | 1   |
| Two   | 0   |
| Three | 3   |
| Four  | 0   |
| Five  | 0   |
| Six   | 3   |

PS: в зависимости от ваших данных, вы можете использовать COUNT(DISTINCT e.keyid).

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