clinic_screenresult表中有三个字段,分别为taskid,modulename,sendtime。1.若taskid相同时,算作一个数据2.当taskid相同时且modulename为空时算为适宜处方数3.当taskid相同时,modulename数据不同,则根据modulename值分别计算数据4.modulename值分别有:体外配伍、单次剂量、给药频次、每日剂量、相互作用、配伍浓度、儿童用药5.分别计算modulename中各个值所占总数的比率,并用SQL表达
时间: 2024-03-06 10:48:32 浏览: 63
以下是根据你的要求编写的 SQL 语句:
```
SELECT
taskid,
CASE
WHEN 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,
modulename IS NULL,
CASE
WHEN modulename IS NULL THEN NULL
ELSE modulename
END
ORDER BY
taskid,
modulename IS NULL,
CASE
WHEN modulename IS NULL THEN NULL
ELSE modulename
END
```
解释如下:
1. 首先,使用 GROUP BY 对 taskid 和 modulename 进行分组,统计每组中的数据条数(即每个 modulename 对应的数据量)。
2. 对于 modulename 为 NULL 的情况,将其归为一个特殊的组(适宜处方数)。
3. 使用 CASE WHEN 语句将 modulename 为 NULL 的情况转换为字符串 '适宜处方数',方便后续处理。
4. 使用 OVER 子句计算每个 taskid 分组中的总数据量。
5. 计算每个 modulename 对应的数据量占总数据量的比例,即 COUNT(*) / SUM(COUNT(*)) OVER (PARTITION BY taskid)。
6. 使用 ORDER BY 对结果按照 taskid、modulename 是否为 NULL、modulename 的值进行排序,方便观察结果。
注意事项:
1. 上述 SQL 语句是基于 MySQL 数据库编写的,如果使用其他数据库需要根据具体语法进行调整。
2. 以上 SQL 语句仅供参考,具体实现需要根据实际情况进行调整。
阅读全文