需求背景
今天在处理实际业务时,有一个表单其需求是展现如下图数据
其主要数据来源于A表,A表包含病种、科室、单例病种实际治疗费用,需要通过病种号关联B表中单例病种标准治疗费用。
实际编程
先left join,再where
运行结果:588条
select
病种,
科室,
病例数,
次均费用,
B.PJZYFY 标准费用,
(次均费用-B.PJZYFY) 次均与标准费用的差,
费用高值,
费用低值
from (
SELECT
A.dise_group_code 病种编码,
A.dscg_dept_name 科室,
A.dise_group_name 病种名称,
COUNT(*) 病例数,
ROUND(SUM(A.ipt_sumfee) / COUNT(*),2) 次均费用,
0 标准费用,
0 次均与标准费用的差,
MAX(A.ipt_sumfee) 费用高值,
MIN(A.ipt_sumfee) 费用低值
FROM
t_ybfzxxb A
WHERE
A.CASES_ZTBS IN ('偏高', '偏低', '正常')
group by A.dise_group_code,A.dscg_dept_name,A.dise_group_name
) T
left join t_dip_qzmx_tbl as B on T.病种编码 = B.FZBM
where B.CBLB = '310'
先where,再left join
运行结果:710条
select
病种,
科室,
病例数,
次均费用,
B.PJZYFY 标准费用,
(次均费用-B.PJZYFY) 次均与标准费用的差,
费用高值,
费用低值
from (
SELECT
A.dise_group_code 病种编码,
A.dscg_dept_name 科室,
A.dise_group_name 病种名称,
COUNT(*) 病例数,
ROUND(SUM(A.ipt_sumfee) / COUNT(*),2) 次均费用,
0 标准费用,
0 次均与标准费用的差,
MAX(A.ipt_sumfee) 费用高值,
MIN(A.ipt_sumfee) 费用低值
FROM
t_ybfzxxb A
WHERE
A.CASES_ZTBS IN ('偏高', '偏低', '正常')
group by A.dise_group_code,A.dscg_dept_name,A.dise_group_name
) T
left join
(select * from t_dip_qzmx_tbl where CBLB = '310') as B on T.病种编码 = B.FZBM
总结
经核对数据发现先进行join操作的,缺失的数据是,B表无法关联对应病种号的数据,无论是使用left或是right其返回结果值都是等同于inner join的返回值。所以建议group by、join、where查询条件同时使用的时候,对返回值是left抑或right时,先对表进行where操作。