MYSQL:根据另外两个表的连接计算一个表中的行数

标签 mysql sql join

我有三个表,条目、机构和医生。这是表数据的一个最小示例:

条目

| 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    |

我什至不知道如何开始编写此查询。任何帮助将不胜感激。

最佳答案

这可以通过连接所有三个表的聚合查询来解决,例如:

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

使用您的样本数据,这个 demo on DB Fiddle 返回:

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

PS:根据您的数据,您可能希望使用 COUNT(DISTINCT e.keyid)

关于MYSQL:根据另外两个表的连接计算一个表中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503319/

相关文章:

SQL 返回落在期间和范围内的日期

MySQL - 从两个表中获取两个计数并将它们按另一列分组

SQL 查询计数

mysql - 使用 sum select 连接 mySQL 表

mysql - 通过 crontab 调度程序运行时 MySQL 重启的问题

mysql - 在 SQL 中连接来自同一个表的两个外键

php - 无法访问 Laravel 中的一个特定模型,得到一个空白页面

mysql - 合并 2 个 "strange"表中的数据

Mysql 'insert if not exists' , 防止 'overlap'

SQL 按列表排序