clinic_screenresult表中有三个字段,分别taskid,modulename,sendtime。 1、用taskid字段去重查询总数,标记为处方总数 2、当taskid相同且modulename都为空时,去重计算总数,标记为不适宜处方数 3、用不适宜处方数除以处方总数,标记为不适宜处方率 根据以上条件,用一条SQL语句表达,并能在progreSQL中执行
时间: 2024-03-06 22:48:52 浏览: 24
以下是一条SQL语句表达:
```
SELECT
COUNT(DISTINCT taskid) AS "处方总数",
COUNT(DISTINCT CASE WHEN modulename IS NULL THEN taskid END) AS "不适宜处方数",
COUNT(DISTINCT CASE WHEN modulename IS NULL THEN taskid END)::float / COUNT(DISTINCT taskid) AS "不适宜处方率"
FROM clinic_screenresult;
```
注意:上述SQL语句中的 `clinic_screenresult` 应该替换为实际的表名。
相关问题
clinic_screenresult表中有三个字段,分别taskid,modulename,sendtime。 1、用taskid字段去重查询总数,标记为处方总数 2、当taskid相同且modulename都为空时,去重计算总数,标记为不适宜处方数 3、用不适宜处方数除以处方总数,标记为不适宜处方率 根据以上条件,用SQL语句表达,并能在progreSQL中执行
以下是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` 字符串的顺序进行排序。