mysql排序后去重_MySql 去重且指定某字段在前的排序方法

今天遇到一个棘手的数据查找并去重的问题:

情况:

1.取出数据库中的数据;

2.同一字段A,不同情况下取出的其他数据可能相同;

3.将2情况下的重复数据删除,且留下指定A值的一条数据;

4.将A存在的记录排序到最前,之后去重,保持A的数据留下,用来标记和非A值记录对比,且做不同的展示;

难点:

* 去重;

* 保留下指定A的数据;

解决方案:

1.按指定字段排序:

SELECTtsf.supplier_id,

tsf.company_id,

tsf.record_id,

tsf.supplier_cpyname,

tsf.file_status,

tsf.create_dt,

tsf.no_check,

tsf.is_auth_updated,

soi.company_id owner_id,

taci.corporation,

taci.m_phone,

taci.contact_addrFROMt_supplier_files tsfleft join t_supplier_owner_info as soi on soi.supplier_id =tsf.supplier_idleft join t_app_company_info as taci on taci.company_id =tsf.company_idleft join t_supplier_regaccount_info tsri on tsri.supplier_id =tsf.supplier_idWHEREtsri.reg_id= 12

ORDER BY FIELD(owner_id,10000) DESC

此Sql中的:

owner_id 为 A

10000 为 a1

上述代码可以将所有的owner_id为10000的排序到最前面:FIELD()

Mysql查询按照某字段指定顺序排序的两个方法,FIELD和substring_index。

例:

SELECT * FROM documents WHERE id IN (5,3,6,1) ORDER BY FIELD(id,5,3,6,1);

2.去重,保留指定字段数据

SELECT *

FROM(SELECTtsf.supplier_id,

tsf.company_id,

tsf.record_id,

tsf.supplier_cpyname,

tsf.file_status,

tsf.create_dt,

tsf.no_check,

tsf.is_auth_updated,

soi.company_id owner_id,

taci.corporation,

taci.m_phone,

taci.contact_addrFROMt_supplier_files tsfleft join t_supplier_owner_info as soi on soi.supplier_id =tsf.supplier_idleft join t_app_company_info as taci on taci.company_id =tsf.company_idleft join t_supplier_regaccount_info tsri on tsri.supplier_id =tsf.supplier_idWHEREtsri.reg_id= 12

ORDER BY FIELD(owner_id,10000) DESC)asnewTableGROUP BY newTable.supplier_id

通过 GROUP BY 重复数据中的唯一字段,将重复的数据去除掉;

结论:

将owner_id为10000的数据保留下来,即保留下来用来优先显示的数据条,且将重复的数据去除掉;这样可以保留区别字段,且有效的将重复字段去除掉;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值