查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
时间: 2024-02-13 18:06:55 浏览: 22
好的,以下是查询语句:
```
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` 对医生编号进行分组,这样就能够得到每个医生的工作证号、姓名和值班次数。
相关问题
数据库使用sql语句查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
可以使用如下的 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()`,如果使用其他数据库系统,可能需要使用不同的函数或语法来实现相同的功能。
创建一个表work_count,包含两个属性工作证号、值班次数。使用子查询的形式将每个医生的工作证号、值班次数存入表work_count。从work_count查询出医生的工作证号、值班次数。
好的,我理解了你的问题。下面是 SQL 语句的实现:
```sql
-- 创建工作计数表
CREATE TABLE work_count (
job_number VARCHAR(20),
duty_count INT
);
-- 将每个医生的工作证号、值班次数存入工作计数表
INSERT INTO work_count (job_number, duty_count)
SELECT job_number, COUNT(*) AS duty_count
FROM duty_roster
GROUP BY job_number;
-- 查询医生的工作证号、值班次数
SELECT job_number, duty_count
FROM work_count;
```
以上 SQL 语句中,我们先创建了一个名为 work_count 的表,包含两个属性:工作证号和值班次数。接着,使用 INSERT INTO...SELECT... 语句将每个医生的工作证号、值班次数存入工作计数表。最后,使用 SELECT 语句从 work_count 表中查询出医生的工作证号、值班次数。
需要注意的是,以上 SQL 语句是基于假设有一个名为 duty_roster 的表,包含两个属性:工作证号和值班日期。你需要根据实际情况进行修改。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)