sql - 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 中没有这么多字母)。
解决方案
您可以使用OUTER JOIN
和GROUP 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
推荐阅读
- reactjs - 反应路由器不切换到非基本路由
- mysql - 如何在我的数据库中查询字段的时间戳值是最新的所有行?
- ios - 获取 UI 的唯一值,但同时保留重复项以在地图上显示数据
- javascript - 使用Javascript将数字签名框添加到任何pdf
- android-studio - 声明一个在内存中为@Nullable 但在SQLite 数据库中为@NonNull 的Room 变量?
- node.js - 如何解决此错误:运行 nodemon serve 后找不到模块“lodash.set”。
- apache-zeppelin - 如何在笔记本段落中访问 Zeppelin 中存储的凭据?
- django - base_name 在 Django 中做了什么?
- typescript - 打字稿不推断表达式签名匹配
- python - 如何使用 docker 容器和 geopy 来避免 nominatim 的超时问题?