优化后的SQL查询:统计医院费用类别金额
以下是优化后的SQL:
SELECT c.hos_name AS 院区, d.fee_stat_name AS 费用类别, SUM(CASE d.fee_stat_cate WHEN '01' THEN t.tot_cost WHEN '02' THEN t.tot_cost WHEN '03' THEN t.tot_cost WHEN '04' THEN t.tot_cost WHEN '05' THEN t.tot_cost WHEN '06' THEN t.tot_cost WHEN '07' THEN t.tot_cost WHEN '08' THEN t.tot_cost WHEN '09' THEN t.tot_cost WHEN '10' THEN t.tot_cost WHEN '11' THEN t.tot_cost WHEN '12' THEN t.tot_cost WHEN '14' THEN t.tot_cost ELSE 0 END) AS 费用金额 FROM fin_ipb_feeinfo t INNER JOIN fin_ipr_inmaininfo b ON t.inpatient_no = b.inpatient_no INNER JOIN com_hospitalinfo c ON b.hospital_didt = c.hos_code INNER JOIN fin_com_feecodestat d ON t.fee_code = d.fee_code WHERE t.balance_state = '1' AND t.fee_date < TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND t.balance_date >= TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND t.balance_date <= TO_DATE('2023-04-18 10:00:00', 'yyyy-mm-dd hh24:mi:ss') AND d.fee_stat_cate IN ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '14') AND d.fee_stat_code = 'ZY01' GROUP BY c.hos_name, d.fee_stat_name
主要优化点:
- 使用INNER JOIN代替WHERE子句连接表,提高查询效率。
- 使用CASE WHEN代替DECODE函数,使代码更清晰易读。
- 将条件"fun_get_fee_stat_cate('ZY01', t.fee_code)"转化为"d.fee_stat_code = 'ZY01'",提高查询效率。
- 将日期格式化字符串中的逗号改为空格,避免语法错误。
原文地址: https://www.cveoy.top/t/topic/nwC9 著作权归作者所有。请勿转载和采集!