查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
时间: 2024-02-13 11:06:55 浏览: 64
Excel模板假期值班人员安排.zip
好的,以下是查询语句:
```
SELECT d.doctor_id, d.name, COUNT(s.shift_id) AS duty_count
FROM doctor d
LEFT JOIN (
SELECT doctor_id, COUNT(shift_id) AS shift_count
FROM shift
GROUP BY doctor_id
) s
ON d.doctor_id = s.doctor_id
GROUP BY d.doctor_id;
```
解释一下查询语句:
首先使用 `LEFT JOIN` 连接 `doctor` 表和派生表 `s`。派生表 `s` 统计了每个医生的值班次数,使用 `GROUP BY` 对医生编号进行分组,这样得到的每一行记录就包含了医生编号和他的值班次数。
然后使用 `COUNT(s.shift_id)` 统计每个医生的值班次数。注意,由于有的医生可能没有值班记录,因此这里使用了 `LEFT JOIN`,保证即使没有值班记录,医生信息也能够被查询出来。
最后使用 `GROUP BY` 对医生编号进行分组,这样就能够得到每个医生的工作证号、姓名和值班次数。
阅读全文