一、首先看一下原始数据
我们现在要对第二行和第三行的customername、linkman、linkmantel这三个字段去重查询
要得到的结果肯定只有三行,distinct肯定是不行的
也就是这样的效果
二、进行分析
要想得到这样的效果
首先你得有个表,(和没说一样),表里一般都会有个主键吧。并且我们一般也不会对主键进行去重查询吧,因为主键本身就不会重复。我们进行去重的字段都是可以重复的,也就是所以这些是前提。正因为是可以重复的所以进行去重查询才有意义。好吧把我自己绕进去了。
正式分析:
四条变三条数据,并且是根据其中某几个字段去重。那么条件是什么呢。以我的图片来分析。
1、要去重的字段:customername、linkman、linkmantel 必须要有不重复的行
2、主键:customerid 每行都不重复
要想从四行数据变成三行不重复的数据,customerid要少一行,所以我们要明确少哪一行,或者说要明确要得到哪一行。
所以可以通过max(),min()函数达到我们的目的。
那么第一步:
select max(customerid) from yinlian_customer group by customername,linkman,linkmantel
通过对这三个字段分组,得到每一组的max(customerid),也就是这三个重复字段的最大customerid,那么四个customerid变成了三个。
第二步:
select * from yinlian_customer a where customerid in
(select max(customerid) from yinlian_customer group by customername,linkman,linkmantel)
三、结果
这样就达到了我们的想法。
工作中涉及到了就记录一下,省得忘记。