• SQL基础(四)-- SQL连接时去掉重复数据


    一、关键词 DISTINCT 用于返回唯一不同的值,只可以在select中使用。

    1.重复数据完全一样,用distinct

    select distinct * from table

    根据字段去重用distinct

    select distinct 列名称 from 表名称 (对一列进行操作)

    select distinct 列名称1,列名称2  from 表名称(对多列进行操作):对多列操作,表示选取 多列都不重复的数据,相当于 多列拼接的记录 的整个一条记录 , 不重复的记录。

    注意:(1). DISTINCT 必须放在第一个参数。(2).DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,相当于 把 SELECT 表达式的项 拼接起来选唯一值。

    二、sysno列不同,sysno类型为int,自增字段,使用聚合函数max或其他

    左连接重复数据表时:先过滤掉有表重复数据

     SELECT * FROM table1 WITH(NOLOCK) A

     LEFT JOIN table2 soEx ON A.SOSysNo=soEx.SOSysNo AND soEx.ExtensionName='IsConfirm'

    WHERE soEx.SysNo IN(SELECT MAX(SysNo) FROM  table WHERE SOSysno=A.SOSysNo)

    三、使用row_number() over()和partition by给每一组添加行号

    row_number() over()分组排序功能:

     在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行。

    partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

    select * from
    (select *, ROW_NUMBER() over (partition by 分组字段(可多个) order by 排序字段) RowNum from 表) AS Result
    where RowNum=1

    先分组排序,再取出每组的第一条记录进行“去重”

  • 相关阅读:
    Linux下通用打印系统CUPS使用教程
    psql 查询表大小
    vim自动保存折叠
    VIM设置代码折叠
    使用 ipdb 调试 Python
    在 Vim 中使用 pydiction 对 Python 进行代码补全
    wget 下载整个网站,或者特定目录
    dpkg: warning: files list file for package `*****' missing, assuming package has no files currently installed解决办法
    Windows安装Redis并添加本地自启动服务并解决客户端dll报错
    windows mysql绿色版配置Mysql5.7.X
  • 原文地址:https://www.cnblogs.com/BounceGuo/p/9815927.html
Copyright © 2020-2023  润新知