• oracle过滤某个字段重复记录,只获取一条记录


    一,首先想到:

    1,关键字distinct

    2,group by

    3,MAX,MIN这样的函数被称为聚集函数,和GROUP搭配起来用

    但均无法实现,执行结果如下

    举例:

    表名:OffsiteOutreachTeam_List

    字段:CORPADDLEVEL(获取该字段不重复数据),CHANNELCODE, CORPNAME, BELONGORGNAME

    执行结果:

    1,distinct

    --一个字段有效,多个字段无效

    select distinct CORPADDLEVEL from OffsiteOutreachTeam_List;

    select distinct CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List;

    注意:当除了过滤字段外的其他所有字段内容相同时,才可以起到过滤效果。

    2,group by

    --只能查询一个字段

    select CORPADDLEVEL from OffsiteOutreachTeam_List group by CORPADDLEVEL; --报错 not a group by expression

    select CORPADDLEVEL,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List group by CORPADDLEVEL;

    3,MAX,MIN这样的函数被称为聚集函数,和GROUP搭配起来用

    --只能过滤两个字段

    SELECT MIN(CHANNELCODE), CORPADDLEVEL FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL --报错 not a group by expression

    SELECT MIN(CHANNELCODE), CORPADDLEVEL,CORPNAME, BELONGORGNAME FROM OffsiteOutreachTeam_List GROUP BY CORPADDLEVEL

    二,正确方式

    1,关键字 row_number() OVER(PARTITION BY 使用子查询对重复数据按照123...排序,再条件需要为1的。

    select  CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME
    from(select ol.CORPADDLEVEL,ol.CHANNELCODE, ol.CORPNAME, ol.BELONGORGNAME, row_number() OVER(PARTITION BY ol.CORPADDLEVEL ORDER BY ol.CORPADDLEVEL) ds
    from OffsiteOutreachTeam_List ol
    where ol.CORPADDLEVEL is not null)
    where ds = 1

    2,使用min group by进行子查询,获取唯一字段,再查询所有字段。
    select  CORPADDLEVEL ,CHANNELCODE, CORPNAME, BELONGORGNAME from OffsiteOutreachTeam_List where CHANNELCODE in
    (select min(CHANNELCODE) from OffsiteOutreachTeam_List group by CORPADDLEVEL) order by CORPADDLEVEL;

  • 相关阅读:
    python并发编程之IO模型
    协程与concurent.furtrue实现线程池与进程池
    网络编程之线程进阶
    多线程讲解
    网络编程之进阶2
    网络编程之进阶
    网络编程之进程
    函数复习之2
    函数复习
    深克隆和浅克隆
  • 原文地址:https://www.cnblogs.com/shenkebky/p/8259876.html
Copyright © 2020-2023  润新知