简单业务sql记录

需求是这样的,统计一家医院的返院人数:其中会涉及到三张表:病人表,计划表,任务表。一个病人看完病之后可能会制定一个或者多个计划,一个计划也有可能有多个任务,其中任务表中有一个is_back字段,等于1 即为返院,等于0 即为未返院。查询该月返院人数,其实很简单,基础数据就是已制定计划人数,但是要注意,需要用病人id主键做groupBy操作。因为病人表和计划表是一对多的。

问题来了。计算未返院人数的时候,因为一个计划可能有多个任务,每个任务都会有is_back 只要其中,当前病人的其中一个计划中的其中一个任务的is_back=1,那么就统计成返院。所以计算返院是单向关系,只要判断is_back等于1就可以,但是未返院如果单纯用is_back=0去判断,再用Patient_id去分组,那么一定会有重复数据。因为计划中的任务为0也可能为1,就是,返院的人数一样会被统计进去。


一开始我想了很久,操作临时表的一些操作等……但是临时表毕竟不是存储在真正磁盘里的数据...而且害怕一下子万一删除真实数据后悔莫及啊。后来我想了两个办法:

方法一:直接算出这个时间段的计划人数减去返院人数,就是未返院人数了。这个方法还是有些,不入流……不专业

方法二:就是用sql解决。统计出is_back=0的人的病人id,然后把is_back=1的返院的病人id取出来,用NOT IN解决。再进行一个count(*)就可以了。其实就是很简单的两个子查询,再来一个NOT IN+count(*)即可解决了……

原创文章 25 获赞 5 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41450959/article/details/81012029