数据库使用sql语句查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
时间: 2024-02-22 17:57:59 浏览: 125
可以使用如下的 SQL 语句查询每个医生的工作证号、姓名和值班次数:
```
SELECT d.work_id, d.name, COALESCE(dt.duty_count, 0) AS duty_count
FROM doctor d
LEFT JOIN (
SELECT doctor_id, COUNT(*) AS duty_count
FROM (
SELECT doctor_id, DATE_FORMAT(duty_date, '%Y-%m-%d') AS date
FROM duty
) AS dt
GROUP BY doctor_id
) AS dt ON d.id = dt.doctor_id
ORDER BY d.work_id;
```
这个查询语句使用了一个派生表(子查询),先将 `duty` 表中的值班日期按照医生 ID 和日期进行分组,计算出每个医生的值班次数,再将这个结果与 `doctor` 表进行左连接,得到每个医生的工作证号、姓名和值班次数。如果一个医生没有值班记录,那么它的值班次数为 0。
需要注意的是,这个查询语句使用了 MySQL 的特有函数 `DATE_FORMAT()`,如果使用其他数据库系统,可能需要使用不同的函数或语法来实现相同的功能。
阅读全文