• MySql 去重且指定某字段在前的排序方法


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

      情况:

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

      2.同一字段A,不同情况<值,如A值为:a1,a2>下取出的其他数据可能相同;

      3.将2情况下的重复数据<除A字段外,其他字段的数据相同>删除,且留下指定A值<如:a1>的一条数据;

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

      难点:

      * 去重;

      * 保留下指定A<a1>的数据;

      解决方案:

      1.按指定字段排序:

    SELECT
            tsf.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_addr
        FROM
            t_supplier_files tsf
            left join t_supplier_owner_info as soi on soi.supplier_id = tsf.supplier_id
            left join t_app_company_info as taci on taci.company_id = tsf.company_id
            left join t_supplier_regaccount_info tsri on tsri.supplier_id = tsf.supplier_id
        WHERE
            tsri.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.去重,保留指定字段数据<将owner_id为10000的数据保留下来,且去掉owner_id为其他值的重复数据去掉>

    SELECT *
    FROM
    (
    SELECT
            tsf.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_addr
        FROM
            t_supplier_files tsf
            left join t_supplier_owner_info as soi on soi.supplier_id = tsf.supplier_id
            left join t_app_company_info as taci on taci.company_id = tsf.company_id
            left join t_supplier_regaccount_info tsri on tsri.supplier_id = tsf.supplier_id
        WHERE
            tsri.reg_id = 12
        ORDER BY FIELD(owner_id,10000) DESC
    ) as newTable
    GROUP BY newTable.supplier_id

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

      结论:

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

      

      

      

  • 相关阅读:
    Day22:异常处理、socke基于TCP协议编程
    Day21:面向对象的软件开发、反射、对象的内置方法
    Day20:绑定方法与非绑定办法、多态和多态性
    Day19:继承实现的原理、子类中调用父类的方法、封装
    Day18:类的抽象、类的组合应用
    Day17:类的继承、派生、组合和接口
    Day16:面向对象编程——类和对象
    数据结构
    python爬虫篇之 性能相关
    scrapy-redis
  • 原文地址:https://www.cnblogs.com/springlight/p/5762513.html
Copyright © 2020-2023  润新知