使用多个连接的SQL计数

Pre*_*ola 2 sql sql-server

我有三个表以下列方式相互关联:

  1. 主持人(有多个会话)
  2. 会话(有多个进程)
  3. 流程

表结构如下:

  1. 主持人表 - id, name
  2. 会话表 - id, host_id, name
  3. 流程表 - id, session_id, name

我想要实现的是会话数量和每个主机上的进程数量.为实现这一点,我尝试了以下查询,但输出错误.

select host.id, 
       count(sessions.id) as "session count", 
       count(process.id) as "process count"
from host as host
     left outer join sessions as sessions on host.id = sessions.host_id
     left outer join process as process on sessions.id = process.session_id
group by host.id;
Run Code Online (Sandbox Code Playgroud)

这是架构的SQLFiddle.

根据小提琴中的数据,输出应为:

id | session count | process count 
----------------------------------
1  |     2         |   3
2  |     1         |   2
3  |     1         |   2
4  |     2         |   3
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

id | session count | process count 
----------------------------------
1  |     3         |   3
2  |     2         |   2
3  |     2         |   2
4  |     3         |   3
Run Code Online (Sandbox Code Playgroud)

获得所需输出的正确查询是什么?

小智 6

不同;

select host.id, 
       count(distinct sessions.id) as "session count", 
       count(distinct process.id) as "process count"
from host as host
     left outer join sessions as sessions on host.id = sessions.host_id
     left outer join process as process on sessions.id = process.session_id
group by host.id;
Run Code Online (Sandbox Code Playgroud)