clinic_screenresult表中有三个字段,分别taskid,modulename,sendtime。 1、用taskid字段去重查询总数,标记为处方总数 2、当taskid相同且modulename都为空时,去重计算总数,标记为不适宜处方数 3、用不适宜处方数除以处方总数,标记为不适宜处方率 根据以上条件,用SQL语句表达,并能在progreSQL中执行
时间: 2024-03-06 07:48:49 浏览: 22
以下是SQL语句表达:
```
-- 计算处方总数
SELECT COUNT(DISTINCT taskid) AS "处方总数"
FROM clinic_screenresult;
-- 计算不适宜处方数
SELECT COUNT(DISTINCT taskid) AS "不适宜处方数"
FROM clinic_screenresult
WHERE modulename IS NULL;
-- 计算不适宜处方率
SELECT COUNT(DISTINCT taskid)::float / (SELECT COUNT(DISTINCT taskid) FROM clinic_screenresult) AS "不适宜处方率"
FROM clinic_screenresult
WHERE modulename IS NULL;
```
注意:上述SQL语句中的 `clinic_screenresult` 应该替换为实际的表名。
相关问题
clinic_screenresult表中有三个字段,分别为taskid,modulename,sendtime。1.若taskid相同时,算作一个数据2.当taskid相同时且modulename为空时算为适宜处方数3.当taskid相同时,modulename数据不同,则根据modulename值分别计算数据4.modulename值分别有:体外配伍、单次剂量、给药频次、每日剂量、相互作用、配伍浓度、儿童用药5.分别计算modulename中各个值所占总数的比率,并用SQL表达
可以使用以下 SQL 语句来实现上述需求:
```
SELECT
taskid,
CASE
WHEN COUNT(DISTINCT modulename) = 1 AND MAX(modulename) IS NULL THEN '适宜处方数'
ELSE modulename
END AS modulename,
COUNT(*) AS count,
COUNT(*) / SUM(COUNT(*)) OVER (PARTITION BY taskid) AS ratio
FROM
clinic_screenresult
GROUP BY
taskid,
CASE
WHEN COUNT(DISTINCT modulename) = 1 AND MAX(modulename) IS NULL THEN '适宜处方数'
ELSE modulename
END
ORDER BY
taskid,
CASE
WHEN COUNT(DISTINCT modulename) = 1 AND MAX(modulename) IS NULL THEN 0
ELSE 1
END,
modulename
```
解释:
1. `CASE` 语句用于将 `modulename` 字段为空的记录转换为字符串 "适宜处方数"。
2. 使用 `GROUP BY` 语句将记录按照 `taskid` 和 `modulename` 进行分组。
3. 使用 `COUNT(*)` 函数统计每个分组中的记录数。
4. 使用窗口函数 `SUM(COUNT(*)) OVER (PARTITION BY taskid)` 计算每个 `taskid` 分组中的总记录数。
5. 使用 `/` 运算符计算比率。
6. 使用 `ORDER BY` 语句将结果按照 `taskid`、是否为适宜处方数、`modulename` 字符串的顺序进行排序。
假设你有四个表,clinic诊所表,有字段id,name;employeey雇员信息表,有字段id,name,type,其中type=1表示医生,2表示收费员,clinic_employee表表示诊所和雇员关系,有id,clinc_id,employee_id;charge收费表,有字段is,clinic_id诊所id,employee_id雇员id,amount金额,create_time 收费时间,格式为年月日 时分秒,写如下sql,按天给出所有收费员金额
请确认一下所提供的表名是否正确,因为在这个问题描述中,clinic表和clinic_employee表都被称为了clinic诊所表。假设这里clinic指的是诊所表,clinic_employee指的是诊所和雇员关系表,那么可以使用如下SQL查询按天给出所有收费员金额:
```
SELECT
ce.employee_id,
DATE_FORMAT(c.create_time, '%Y-%m-%d') AS day,
SUM(c.amount) AS total_amount
FROM clinic_employee ce
JOIN charge c ON ce.clinic_id = c.clinic_id AND ce.employee_id = c.employee_id
JOIN employeey e ON ce.employee_id = e.id
WHERE e.type = 2
GROUP BY ce.employee_id, day
```
这个SQL语句中,首先通过clinic_employee表和charge表的关联,找到每个收费员在每个诊所的收费记录。然后通过employeey表中的type字段来筛选出收费员,使用DATE_FORMAT函数将create_time字段转换成天的格式,最后按照employee_id和day分组,计算每个收费员每天的总金额。