您现在的位置是:首页 > Mysql > 网站首页Mysql

风三郎 2022-11-14 15:46:54 333人次围观
风三郎   Mysql   Thinkphp   php  
简介 mysql如何更据字段查询一样的数据有多少条


 已知,客户在投保之前和投保之后在applicant表记录了对应的两条数据,表结构如上所示。

id是投保单id,投保前后的两条数据一定一致,applicant_id是投保人id,有可能存在不一致的情况,投保前后对应oldnew字段存储的状态分别为1和2。

现要将数据区分:

1.统计数据前后applicant_id字段未发生改变的数据,将对应数据展示

2.统计数据前后applicant_id字段发生了改变的数据,并对数据进行拼接

1.分析可知其实就是要得到applicant_id和id两个字段相同的数据
sql语句:

select id,applicant_id,applicant_name,oldnew
from applicant a
group by id,applicant_id
having count(*)=2 

其中group by id,applicant_id 意味着 id和applicant_id都要一致才能分为一组会得到以下结果

having条件针对的是已经分组之后的一个个组合对象,比如上图其实就是分为五组,其中id=2的那组中有两条数据,count(*)针对的是组合对象,id=2对应的值为count(*)=2,得到以下结果

 2.统计数据前后applicant_id字段发生了改变的数据,并对数据进行拼接
sql语句:

select a.id 投保前id,a.applicant_id 投保前applicantid,b.id 投保后id,b.applicant_id 投保后applicantid
from applicant a ,applicant b
where a.id=b.id and a.oldnew=1 and b.oldnew=2
group by a.id,a.applicant_id
having count(*)=1 
and a.id in
 (select c.id
from applicant c
group by c.id
having count(*)=2)

其中

from applicant a ,applicant b  是为了一个表当两个表来查询,可以将两条数据拼接展示

a.oldnew=1 and b.oldnew=2 条件约束使得查询出来的语句只有一条

group by a.id,a.applicant_id
having count(*)=1                是为了校验applicant_id是否不一致,就会分成两组

select c.id  from applicant c
group by c.id   having count(*)=2   是为了保证一定要是id相同的数据

group by分组一般只展示分组的字段,mysql8.0可以展示其他字段
 

文章评论

来说点儿什么吧...

评论内容:

客服在线

服务时间

周一至周日 08:00-22:00

登录与注册