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的數據保留下來,即保留下來用來優先顯示的數據條,且將重復的數據去除掉;這樣可以保留區別字段,且有效的將重復字段去除掉;

 

 

  

 

  

 

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM