数据库使用sql语句查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
时间: 2024-02-22 16:57:59 浏览: 44
可以使用如下的 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()`,如果使用其他数据库系统,可能需要使用不同的函数或语法来实现相同的功能。
相关问题
查询每个医生的工作证号、姓名和值班次数。(半天算值班1次,要求只按工作证号分组,统计次数建议用派生表实现)
好的,根据您的要求,可以使用以下 SQL 语句查询每个医生的工作证号、姓名和值班次数:
```sql
SELECT t1.工作证号, t1.姓名, COUNT(t2.值班日期) AS 值班次数
FROM 医生表 t1 LEFT JOIN (
SELECT 工作证号, DATE_FORMAT(值班日期, '%Y-%m-%d') AS 值班日期
FROM 值班表
GROUP BY 工作证号, 值班日期
) t2 ON t1.工作证号 = t2.工作证号
GROUP BY t1.工作证号;
```
其中,`医生表` 和 `值班表` 分别是医生和值班信息的表,`工作证号` 和 `姓名` 是医生表中的字段,`值班日期` 是值班表中的字段。由于半天算值班 1 次,所以需要将值班日期格式化为日期字符串,并按照工作证号和日期分组,最后在外层查询中按照工作证号分组并统计次数。
希望这个 SQL 语句能够帮到您!
创建一个表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 的表,包含两个属性:工作证号和值班日期。你需要根据实际情况进行修改。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)