某医院患者住院信息包括两个方面的内容(Oracle数据库)
表1 收费明细表:charge_detail
患者ID 住院次数 收费类别 费用
表2 住院记录表:pat_visit
患者ID 住院次数 入院时间 出院时间 入院科室 出院科室
问题1:基于以上两张表统计如下数据,结果按月份(降序),出院科室排序。
需求结果:
出院科室 出院月份 总费用 药品占比
思路:从住院记录表(pat_visit)开始,左连接收费明细表(charge_detail),通过患者ID和住院次数确保所有住院记录都被包括,即使没有收费记录。然后,按出院科室和住院次数进行分组,计算总费用和药品占比。药品占比是通过DECODE函数实现的:当收费类别为“药品”时,累加费用,否则为0,再除以总费用。结果会显示出院科室、住院次数、总费用和药品占比,但代码中没有明确指定排序方式,理论上需要按月份降序和出院科室排序,但这里使用了住院次数(visit_no)作为分组字段之一。
1 2 3 4 5 6 7 8
| SELECT p.DEPT_DISCHARGE_FROM, p.visit_no, sum(c.costs), sum(decode(c.charge_type,'药品',c.costs,0))/sum(c.costs) FROM pat_visit p left join CHARGE_DETAIL c on c.patient_id=p.patient_id and c.visit_no=p.visit_no group by P.DEPT_DISCHARGE_FROM, p.visit_no
|
问题2:返回2023年3月出院科室为心内科的本期药品收入,同期药品收入及同比增长率。
需求结果:
出院科室 出院月份 本期药品费用 同期药品费用 同比增长率
思路:使用两个公共表表达式(CTE):tmp和tmp1。tmp查询2023年3月出院的心内科患者的药品费用总和,通过左连接收费明细表,过滤出院时间、科室和收费类别,并按科室和出院月份分组。tmp1类似地查询2022年3月的数据。主查询则左连接这两个CTE,按科室匹配,计算本期药品费用、同期药品费用以及同比增长率((本期-同期)/同期)。代码意图是通过比较两个时间段的药品收入来评估增长情况,但连接条件中有一个拼写错误(tmpl),可能影响结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| with tmp as( select p.dept_discharge_from, to_char(p.discharge_date_time,'yyyymm') ch_date, sum(c.costs) costs from pat_visit p left join CHARGE_DETAIL c on c.patient_id=p.patient_id and c.visit_no=p.visit_no where to_char(p.discharge_date_time,'yyyymm')='202303' and p.dept_discharge_from='心内科' and c.charge_type='药品' group by p.dept_discharge_from,to_char(p.discharge_date_time,'yyyymm') ),tmp1 as ( select p.dept_discharge_from, to_char(p.discharge_date_time,'yyyymm') ch_date, sum(c.costs) costs from pat_visit p left join CHARGE_DETAIL c on c.patient_id=p.patient_id and c.visit_no=p.visit_no where to_char(p.discharge_date_time,'yyyymm')='202203' and p.dept_discharge_from='心内科' and c.charge_type='药品' group by p.dept_discharge_from,to_char(p.discharge_date_time,'yyyymm') )
select tmp.dept_discharge_from, tmp.ch_date, tmp.costs, tmp1.costs, (tmp.costs-tmp1.costs)/tmp1.costs from tmp left join tmp1 on tmp.dept_discharge_from=tmp1.dept_discharge_from
|
问题3:将问题1中查询出的2022年3月份数据插入到指标表kpi
字段:年月、科室、指标编码、指标值、创建人、创建时间
注:指标编码为固定值“K001”,指标名称为固定值“药品占比”,创建人为自己名字,创建时间为当前时间
思路:首先指定插入的字段,包括年月、科室、指标编码、指标名称、指标值、创建人和创建时间。然后,从住院记录表左连接收费明细表,过滤出2022年3月出院的数据,按出院科室和住院次数分组,计算药品占比(使用DECODE函数识别药品费用)。固定值如年月、指标编码、指标名称、创建人和当前时间被直接插入。代码意图是将计算出的药品占比作为指标记录保存,以便后续监控和分析,但分组依据包括住院次数,可能导致数据粒度较细。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| insert into kpi ( MON, DEPT, KPI_CODE, KPI_NAME, KPI_VALUE, CREATE_BY, CREATE_TIME ) SELECT '2022-03', P.DEPT_DISCHARGE_FROM, 'K001', '药品占比', sum(decode(c.charge_type,'药品',c.costs,0))/sum(c.costs), 'hwz', sysdate FROM pat_visit p left join CHARGE_DETAIL c on c.patient_id=p.patient_id and c.visit_no=p.visit_no where to_char(p.discharge_date_time,'yyyymm')='202203' group by p.DEPT_DISCHARGE_FROM,p.visit_no
|