首页 > 解决方案 > SQL 统计不同表中出现的次数

问题描述

我的数据库中有 4 个表:传入信件、传出信件、本地信件和员工。在“字母”表中,有一个 register_employee 已经注册了这封信。

每个员工都有他/她的唯一 ID(例如“3de9a23e-b927-4a27-a66a-c1f30b8c1464”)。

表如下所示:

employee:
 id         first_name    last_name   age  

incoming:
 id      register_employee  summary     letter   adress   date_sent 

“传出”和“本地”表看起来与“传入”表相同。

我需要计算每个员工注册了多少个字母以及哪种类型。

示例结果:

employee      incoming  outgoing  local 
Bob Marley      45        33        5
John Travolta   31        10        9
George Bush     98        15        38

我尝试使用完全联接和嵌套的 Select 语句,但我得到的结果可能是错误的,因为我为每个员工获得了数百万个计数(我在 db 中没有这么多字母)。

标签: sqlpostgresqlcount

解决方案


您可以使用OUTER JOINGROUP BY如下:

- 更新

您可以使用多个子查询:

select e.id, e.firstname,
       (select count(*) from incoming i where i.register_employee  = e.id) as incoming_letter,
       (select count(*) from outgoing o where o.register_employee  = e.id) as outgoing_letter,
       (select count(*) from local l where l.register_employee  = e.id) as local_letter
  from employee e

推荐阅读