精华内容
下载资源
问答
  • Oracle 如何查找并删除重复记录

    千次阅读 2020-08-24 13:50:23
    本文介绍如何在 Oracle 数据库中查找并删除重复记录,包括使用聚合函数加上子查询或者连接查询、使用分析函数等方法查找单个字段或者多个字段中的重复数据,以及使用子查询中分析函数等方法实现重复数据的删除。

    大家好,我是只谈技术不剪发的 Tony 老师。由于一些历史原因或者人为的误操作,可能会导致数据表中存在重复的记录。前文介绍了如何查找 MySQL 中的重复数据以及如何删除这些重复的记录,今天我们继续讨论如何在 Oracle 数据库中实现相同的功能。

    创建示例表

    我们首先创建一个示例表 people 并生成一些数据:

    CREATE TABLE people (
        id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
        name varchar2(50) NOT NULL,
        email varchar2(100) NOT NULL
    );
    
    INSERT INTO people(name, email)
    VALUES ('张三', 'zhangsan@test.com');
    INSERT INTO people(name, email)
    VALUES ('李四', 'lisi@test.com');
    INSERT INTO people(name, email)
    VALUES ('王五', 'wangwu@test.com');
    INSERT INTO people(name, email)
    VALUES ('李斯', 'lisi@test.com');
    INSERT INTO people(name, email)
    VALUES ('王五', 'wangwu@test.com');
    INSERT INTO people(name, email)
    VALUES ('王五', 'wangwu@test.com');
    
    SELECT * FROM people;
    ID|NAME |EMAIL            |
    --|-----|-----------------|
     1|张三  |zhangsan@test.com|
     2|李四  |lisi@test.com    |
     3|王五  |wangwu@test.com  |
     4|李斯  |lisi@test.com    |
     5|王五  |wangwu@test.com  |
     6|王五  |wangwu@test.com  |
    

    其中,2 和 4 的 email 字段存在重复数据;3、5 和 6 的 name 和 email 字段存在重复数据。

    此时,如果我们想要为 email 字段创建一个唯一约束,将会返回错误:

    ALTER TABLE people ADD CONSTRAINT uk_people_email UNIQUE (email);
    ERROR at line 1:
    ORA-02299: cannot validate (TONY.UK_PEOPLE_EMAIL) - duplicate keys found
    

    显然,我们必须找出并删除 email 字段中的重复记录才能创建唯一约束。

    使用聚合函数查找重复记录

    基于单个字段的重复记录

    如果想要找出 email 重复的数据,可以基于该字段进行分组统计,并且返回行数大于 1 的分组:

    SELECT email, count(email)
    FROM people
    GROUP BY email
    HAVING count(email) > 1;
    EMAIL          |COUNT(EMAIL)|
    ---------------|------------|
    lisi@test.com  |           2|
    wangwu@test.com|           3|
    

    查询结果显示有两个邮箱地址存在重复情况。如果想要查看完整的重复数据,可以使用子查询或者连接查询:

    SELECT *
    FROM people
    WHERE email IN (
          SELECT email
          FROM people
          GROUP BY email
          HAVING count(email) > 1)
    ORDER BY email;
    ID|NAME |EMAIL          |
    --|-----|---------------|
     2|李四  |lisi@test.com  |
     4|李斯  |lisi@test.com  |
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    
    WITH d AS (
      SELECT email
      FROM people
      GROUP BY email
      HAVING count(email) > 1)
    SELECT p.*
    FROM people p
    JOIN d ON (d.email = p.email)
    ORDER BY p.email;
    ID|NAME |EMAIL          |
    --|-----|---------------|
     2|李四  |lisi@test.com  |
     4|李斯  |lisi@test.com  |
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    

    另一种查找重复记录的方法就是直接使用自连接查询和 distinct 操作符,例如:

    SELECT DISTINCT p.*
    FROM people p
    JOIN people d ON p.email = d.email
    WHERE p.id <> d.id
    ORDER BY p.email;
    ID|NAME |EMAIL          |
    --|-----|---------------|
     2|李四  |lisi@test.com  |
     4|李斯  |lisi@test.com  |
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    

    注意不能省略 distinct,否则会某些数据(3、5、6)会返回多次。

    基于多个字段的重复记录

    如果我们想要找出 name 和 email 两个字段都重复的数据,可以基于这两个字段进行分组统计:

    SELECT *
    FROM people
    WHERE (name, email) IN (
          SELECT name, email
          FROM people
          GROUP BY name, email
          HAVING count(1) > 1)
    ORDER BY email;
    ID|NAME |EMAIL          |
    --|-----|---------------|
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    
    WITH d AS (
      SELECT name, email
      FROM people
      GROUP BY name, email
      HAVING count(*) > 1)
    SELECT p.*
    FROM people p
    JOIN d ON (d.name = p.name AND d.email = p.email)
    ORDER BY p.email;
    ID|NAME |EMAIL          |
    --|-----|---------------|
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    

    只有当 name 和 email 都相同时才是重复数据,所以 2 和 4 不是重复记录。

    使用分析函数查找重复记录

    使用聚合函数查找重复记录需要扫描同一个表两次,如果表中的数据量很大时,可能存在性能问题。为此,我们可以采用另一种方法:分析函数(窗口函数)。

    基于单个字段的重复记录

    首先,我们通过 count() 分析函数找出每个 email 出现的次数:

    SELECT id, name, email, count(*) over (partition by email) cnt
    FROM people;
    ID|NAME |EMAIL            |CNT|
    --|-----|-----------------|---|
     4|李斯  |lisi@test.com    |  2|
     2|李四  |lisi@test.com    |  2|
     6|王五  |wangwu@test.com  |  3|
     3|王五  |wangwu@test.com  |  3|
     5|王五  |wangwu@test.com  |  3|
     1|张三  |zhangsan@test.com|  1|
    

    分析函数不仅可以找出字段的重复次数,同时还可以保留原表中的数据,避免了二次扫描的操作。接下来我们只需要返回次数大于 1 的记录即可:

    WITH d AS (
      SELECT id, name, email, 
             count(*) over (partition by email) cnt
      FROM people)
    SELECT *
    FROM d
    WHERE cnt > 1
    ORDER BY id;
    ID|NAME |EMAIL          |CNT|
    --|-----|---------------|---|
     2|李四  |lisi@test.com  |  2|
     3|王五  |wangwu@test.com|  3|
     4|李斯  |lisi@test.com  |  2|
     5|王五  |wangwu@test.com|  3|
     6|王五  |wangwu@test.com|  3|
    

    基于多个字段的重复记录

    分析函数同样支持基于多个字段的分区操作,以下语句可以用于找出 name 和 email 两个字段都重复的数据:

    WITH d AS (
      SELECT id, name, email, 
             count(*) over (partition by name, email) cnt
      FROM people)
    SELECT *
    FROM d
    WHERE cnt > 1
    ORDER BY id;
    ID|NAME |EMAIL          |CNT|
    --|-----|---------------|---|
     3|王五  |wangwu@test.com|  3|
     5|王五  |wangwu@test.com|  3|
     6|王五  |wangwu@test.com|  3|
    

    显然,分析函数不但拥有更好的性能,也具有更好的可读性。

    删除重复记录

    记下来需要解决的问题就是如何删除这些重复记录,通常我们需要保留其中的一条记录。

    使用子查询删除重复记录

    假如我们想要删除 email 字段重复的记录,只保留其中 id 最大的一条;可以使用子查询找出需要保留的数据,然后删除其他的数据:

    DELETE 
    FROM people
    WHERE id NOT IN (
          SELECT max(id)
          FROM people
          GROUP BY email
         );
    

    删除之后再次查询 people 表:

    SELECT * FROM people;
    ID|NAME |EMAIL            |
    --|-----|-----------------|
     1|张三  |zhangsan@test.com|
     4|李斯  |lisi@test.com    |
     6|王五  |wangwu@test.com  |
    

    也可以使用关联子查询删除重复的数据:

    DELETE 
    FROM people p
    WHERE p.id NOT IN (
          SELECT max(id)
          FROM people
          WHERE email = p.email
         );
    

    在执行上面的语句之前,记得重新创建 people 表并生成测试数据。

    💡想一想,如果想要保留重复数据中 id 最小的数据应该怎么实现呢?

    使用分析函数删除重复记录

    ROW_NUMBER() 分析函数可以用于将数据进行分组,然后为每一条数据分配一个唯一的数字编号。例如:

    SELECT id, name, email, 
           row_number() over (PARTITION BY email ORDER BY id) AS row_num 
    FROM people;
    ID|NAME|EMAIL             |ROW_NUM|
    --|----|------------------|-------|
     2|李四  |lisi@test.com    |      1|
     4|李斯  |lisi@test.com    |      2|
     3|王五  |wangwu@test.com  |      1|
     5|王五  |wangwu@test.com  |      2|
     6|王五  |wangwu@test.com  |      3|
     1|张三  |zhangsan@test.com|      1|
    

    以上语句基于 email 分组(PARTITION BY email),同时按照 id 进行排序(ORDER BY id),然后为每个组内的数据分配一个编号;如果编号大于 1 就意味着存在重复的数据。

    📝除了 ROW_NUMBER() 之外,RANK() 或者 DENSE_RANK() 函数也可以实现以上功能。关于窗口函数的介绍和使用案例,可以参考这篇文章

    我们可以基于该查询结果删除重复的记录:

    DELETE 
    FROM people
    WHERE id IN (
      SELECT id
      FROM (
          SELECT id, name, email, 
                 row_number() over (PARTITION BY email ORDER BY id DESC) AS row_num 
          FROM people) d
      WHERE row_num > 1);
    

    在执行上面的语句之前,记得重新创建 people 表并生成测试数据。

    基于多个字段的重复数据删除方法和单个字段类似,大家可以自行尝试。最后,为了防止再次产生重复数据,可以增加一个唯一约束。例如:

    ALTER TABLE people ADD CONSTRAINT uk_people_email UNIQUE (email);
    

    总结

    本文介绍了如何在 Oracle 数据库中查找并删除重复记录,包括使用聚合函数加上子查询或者连接查询、使用分析函数等方法查找单个字段或者多个字段中的重复数据,以及使用子查询中分析函数等方法实现重复数据的删除。

    如果觉得文章对你有用,欢迎关注❤️、评论📝、点赞👍!

    展开全文
  • 使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录,具体字段自己决定。 例子如下: 假设test_table表中有如下数据: SQL查询语句查询全部数据: SELECT DISTINCT(username) FROM test_table; 结果如下:

    在项目中遇到了这个问题,研究了一下,觉得还是很有必要做一下笔记:

     

    DISTINCT 关键字解释

    使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录,具体字段自己决定。
    例子如下:
    假设test_table表中有如下数据:
    SQL查询语句查询全部数据:
    SELECT DISTINCT(username) FROM test_table;
    结果如下:
    小提示:
    使用 DISTINCT 关键字去掉重复记录具有较大的局限性。DISTINCT() 只能包含一个字段且查询结果也只返回该字段而非数据完整记录(如上例所示)。
    可以尝试使用如下语法:
    SELECT DISTINCT(column),column1,column2,... FROM table_name
    该查询结果将返回列出的所有字段,但该查询往往使 column 的唯一性失效,且 column 1,column 2,… 不能放在 DISTINCT(column) 之前。
       如果想返回以下结果:
    则需要用到GROUP BY关键字,具体查询SQL如下:
    SELECT DISTINCT(ID),username,password From test_table GROUP BY username;
     

     

     

    展开全文
  • MySQL 如何查找并删除重复记录

    千次阅读 多人点赞 2020-08-11 18:00:04
    介绍了如何在 MySQL 中查找并删除重复记录,包括使用 GROUP BY 分组、子查询或者连接查询等方法查找单个字段或者多个字段中的重复数据,以及使用 DELETE FROM 语句、子查询、中间表和窗口函数等方法实现重复数据的...

    大家好,我是只谈技术不剪发的 Tony 老师。由于一些历史原因或者误操作,可能会导致数据表中存在重复的记录;今天我们就来谈谈如何查找 MySQL 表中的重复数据以及如何删除这些重复的记录。

    创建示例表

    首先创建一个示例表 people 并生成一些数据:

    drop table if exists people;
    create table people (
        id int auto_increment primary key,
        name varchar(50) not null,
        email varchar(100) not null
    );
    
    insert into people(name, email)
    values ('张三', 'zhangsan@test.com'),
           ('李四', 'lisi@test.com'),
           ('王五', 'wangwu@test.com'),
           ('李斯', 'lisi@test.com'),
           ('王五', 'wangwu@test.com'),
           ('王五', 'wangwu@test.com');
    
    select * from people;
    id|name  |email            |
    --|------|-----------------|
     1|张三  |zhangsan@test.com|
     2|李四  |lisi@test.com    |
     3|王五  |wangwu@test.com  |
     4|李斯  |lisi@test.com    |
     5|王五  |wangwu@test.com  |
     6|王五  |wangwu@test.com  |
    

    其中,2 和 4 的 email 字段存在重复数据;3、5 和 6 的 name 和 email 字段存在重复数据。

    此时,如果我们想要为 email 创建一个唯一约束,将会返回错误:

    alter table people add constraint uk_people_email unique key (email);
    ERROR 1062 (23000): Duplicate entry 'wangwu@test.com' for key 'people.uk_people_email'
    

    显然,我们必须找出并删除 email 字段中的重复记录才能创建唯一约束。

    查找单个字段中的重复数据

    如果想要找出 email 重复的数据,可以基于该字段进行分组统计,并且返回行数大于 1 的分组:

    select email, count(email)
    from people
    group by email
    having count(email) > 1;
    email          |count(email)|
    ---------------|------------|
    lisi@test.com  |           2|
    wangwu@test.com|           3|
    

    查询结果显示有两个邮箱地址存在重复情况。如果想要查看完整的重复数据,可以使用子查询或者连接查询:

    select *
    from people
    where email in (
          select email
          from people
          group by email
          having count(email) > 1)
    order by email;
    id|name  |email          |
    --|------|---------------|
     2|李四  |lisi@test.com  |
     4|李斯  |lisi@test.com  |
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    
    select p.*
    from people p
    join (
      select email
      from people
      group by email
      having count(email) > 1
    ) d on p.email = d.email
    order by email;
    id|name  |email          |
    --|------|---------------|
     2|李四  |lisi@test.com  |
     4|李斯  |lisi@test.com  |
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    

    另一种查找重复记录的方法就是直接使用自连接查询和 distinct 操作符,例如:

    select distinct p.*
    from people p
    join people d on p.email = d.email
    where p.id <> d.id
    order by p.email;
    id|name  |email          |
    --|------|---------------|
     4|李斯  |lisi@test.com  |
     2|李四  |lisi@test.com  |
     6|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     3|王五  |wangwu@test.com|
    

    注意,不能省略 distinct,否则会某些数据(3、5、6)会返回多次。

    查找多个字段中的重复数据

    如果我们想要找出 name 和 email 字段都重复的数据,实现方式也类似:

    select *
    from people
    where (name, email) in (
          select name, email
          from people
          group by name, email
          having count(1) > 1)
    order by email;
    id|name  |email          |
    --|------|---------------|
     3|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     6|王五  |wangwu@test.com|
    
    select distinct p.*
    from people p
    join people d on p.name = d.name and p.email = d.email
    where p.id <> d.id
    order by email;
    id|name  |email          |
    --|------|---------------|
     6|王五  |wangwu@test.com|
     5|王五  |wangwu@test.com|
     3|王五  |wangwu@test.com|
    

    只有当 name 和 email 都相同时才是重复数据,所以 2 和 4 不是重复记录。

    删除重复数据

    找出重复数据之后,需要解决的就是如何删除了,通常我们需要保留其中的一条记录。

    使用 DELETE FROM 删除重复数据

    假如我们想要删除 email 重复的记录,只保留其中一条,可以使用 DELETE FROM 语句实现:

    delete p
    from people p
    join people d on p.email = d.email and p.id < d.id;
    

    delete 语句通过连接找出需要删除的记录,以上示例保留了重复数据中的最大 id 对应的数据行。再次查询 people 表:

    select * from people;
    id|name  |email            |
    --|------|-----------------|
     1|张三  |zhangsan@test.com|
     4|李斯  |lisi@test.com    |
     6|王五  |wangwu@test.com  |
    

    想一想,如果想要保留重复数据中 id 最小的数据应该怎么实现呢?

    利用子查询删除重复数据

    通过子查询可以找出需要保留的数据,然后删除其他的数据:

    delete
    from people
    where id not in (
          select max(id)
          from people
          group by email
         );
    

    在执行上面的语句之前,记得重新创建 people 表并生成测试数据。

    通过中间表删除重复数据

    通过使用中间表也可以实现重复记录的删除,例如:

    -- 创建中间表
    create table people_temp like people;
    
    -- 复制需要保留的数据行
    insert into people_temp(id, name, email)
    select id, name, email
    from people
    where id in (
          select max(id)
          from people
          group by email
         );
    
    --删除原表
    drop table people;
    
    -- 将中间表重命名为原表
    alter table people_temp rename to people;
    

    在执行上面的语句之前,记得重新创建 people 表并生成测试数据。

    ⚠️这种方式需要注意的一个问题就是 create table … like 语句不会复制原表上的外键约束,需要手动添加。

    利用窗口函数删除重复数据

    ROW_NUMBER() 是 MySQL 8.0 中新增的窗口函数,可以用于将数据进行分组,然后为每一条数据分配一个唯一的数字编号。例如:

    select id, name, email, 
           row_number() over (partition by email order by id) as row_num 
    from people;
    id|name  |email            |row_num|
    --|------|-----------------|-------|
     2|李四  |lisi@test.com    |      1|
     4|李斯  |lisi@test.com    |      2|
     3|王五  |wangwu@test.com  |      1|
     5|王五  |wangwu@test.com  |      2|
     6|王五  |wangwu@test.com  |      3|
     1|张三  |zhangsan@test.com|      1|
    

    以上语句基于 email 分组(partition by email),同时按照 id 进行排序(order by id),然后为每个组内的数据分配一个编号;如果编号大于 1 就意味着存在重复的数据。

    📝除了 ROW_NUMBER() 之外,RANK() 或者 DENSE_RANK() 函数也可以实现以上功能。关于窗口函数的介绍和使用案例,可以参考这篇文章

    基于该查询结果可以删除重复的记录:

    delete
    from people
    where id in (
      select id
      from (
          select id,
                 row_number() over (partition by email order by id desc) as row_num 
          from people) d
      where row_num > 1);
    

    在执行上面的语句之前,记得重新创建 people 表并生成测试数据。

    基于多个字段的重复数据删除方法和单个字段非常类似,大家可以自行尝试,也欢迎留言讨论!

    总结

    本文介绍了如何在 MySQL 中查找并删除重复记录,包括使用 GROUP BY 分组、子查询或者连接查询等方法查找单个字段或者多个字段中的重复数据,以及使用 DELETE FROM 语句、子查询、中间表和窗口函数等方法实现重复数据的删除。

    如果觉得文章对你有用,欢迎关注❤️、评论📝、点赞👍!

    展开全文
  • 想从一个dj_nsrxx表中取出不重复的前100条记录:select distinct a.nsrsbh,a.djxh,a....原因是:执行时,是先返回100条记录,然后再distinct,假设有重复记录,那么实际返回的记录数会小于100。经查询资料发现:dist...

    想从一个dj_nsrxx表中取出不重复的前100条记录:

    select distinct a.nsrsbh,a.djxh,a.zgswjg from dj_nsrxx a where  rownum <=100;

    这样执行后发现,实际只能查出少于100条的数据。

    原因是:执行时,是先返回100条记录,然后再distinct,假设有重复记录,那么实际返回的记录数会小于100。


    经查询资料发现:

    distinct 会对返回的结果集进行排序,所以会大大影响查询效率,大数据集时比较明显。取非重复记录的前N条记录时,distinct会影响rownum的约束条件。

    rownum 是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。oracle在select出一条记录后便加上一个rownum,而不等所有的结果都select出来后再加上rownum。


    可以改为:

    select * 
      from (select distinct a.nsrsbh,a.djxh,a.zgswjg 
          from dj_nsrxx a)
     where  rownum <=100;


    展开全文
  • Mysql select 如何去除重复数据

    千次阅读 2019-05-26 11:27:05
    开门见山 在数据库进行数据查询的时候,由于查询条件的不充分性,直接导致数据耦合 在这时,需要对数据进行...关键词 DISTINCT 用于返回唯一不同的值。 语法:SELECT DISTINCT 列名称 FROM 表名称 先把不重复数据的i...
  • 在.NET Framework2.0中,选择DataTable等数据源中的唯一值(类似SQL中Distinct的返回结果)非常简单,如下即可: DataTable d = dataSetName.dataTableName.DefaultView.ToTable(true, new string[] { "ColumnName...
  • SELECT DISTINCT 语句用于返回唯一不同的值。  SELECT DISTINCT 语法: SELECT DISTINCT column_name,column_name FROM table_name; 使用情况:想去除表中重复数据(每行完全相同或者某一列某几列相同) ...
  • SQL SELECT DISTINCT 语句(去重复语句)

    千次阅读 2017-03-09 16:27:25
    SQL SELECT DISTINCT 语句 ...关键词 DISTINCT 用于返回唯一不同的值。 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:
  • DataTabel中distinct 在.NET Framework2.0中,选择DataTable等数据源中的唯一值(类似SQL中Distinct的返回结果)非常简单,如下即可: DataTable d = dataSetName.dataTableName.Defau
  • oracle中SELECT DISTINCT 的常规用法

    千次阅读 2017-02-09 17:03:53
    新年开工五天,连加了三天的班,这酸爽,...关键词 DISTINCT 用于返回唯一不同的值。”-------来自w3cschool。 比如我遇到的问题:表内有字段名为“类型”,表内有很多条记录,我想查找出来这些记录里到底属于哪些类
  • 在.NET Framework2.0中,选择DataTable等数据源中的唯一值(类似SQL中Distinct的返回结果)非常简单,如下即可: DataTable d = dataSetName.dataTableName.DefaultView.ToTable(true, new string[] { "ColumnName...
  • 查询重复或不重复记录SQL语句

    千次阅读 2012-05-25 16:55:42
    1.如何用SQL语句把一个表里面某字段内有相同的记录查询出来 现在有一个表 有三列 分别是tel,name,addr 我现在要查询name一样的 具体T-SQL语句要怎么写 求助...select name from tb group by name having count...
  • sql重复数据只取一条记录

    千次阅读 2020-12-10 17:08:00
    1、SQLSELECT DISTINCT 语句 ...关键词 DISTINCT 用于返回唯一不同的值。 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 SELECT DISTINCT Company FROM Orders 2、子查询限制返回结果...
  • MySQL查询重复出现次数最多的记录

    千次阅读 2014-07-04 00:27:35
    MySQL查询的方法很多,下面为您介绍的MySQL查询语句用于实现查询重复出现次数最多的记录,对于学习MySQL查询有很好的帮助作用。 在有些应用里面,我们需要查询重复次数最多的一些记录,虽然这是一个很简单的查询...
  • 使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录。 语法: SELECT DISTINCT(column) FROM tb_name 例子: 假定 user 表有如下记录: uid username 1 小李 2 小张 3 小李 4 ...
  • 数据库查询重复记录的数量

    千次阅读 2016-08-22 20:50:44
    先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中 的不同字段(一或多条记录)作运算。 二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区...
  • MYSQL避免重复插入记录的三种方法

    万次阅读 2018-08-23 08:59:11
    方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: ...这样当有重复记录就会忽略,执行后返回数字0,还有个应用就是复制表,避免重复...
  • 查询重复出现次数最多的记录

    千次阅读 2014-01-13 11:22:28
    MySQL查询的方法很多,下面为您介绍的MySQL查询语句用于实现查询重复出现次数最多的记录,对于学习MySQL查询有很好的帮助作用。 在有些应用里面,我们需要查询重复次数最多的一些记录,虽然这是一个很简单的查询...
  • 我的电脑系统:Windows 10 64位 SQL Server 软件版本: SQL Server 2014 Express 本篇博客里面使用了 scott 库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇...例子:select lower(ena
  • DISTINCT 方法用于返回唯一不同的值 。 例如数据库表中有以下数据 以下代码会返回 user_login 字段不同的数据 Db::table('think_user')->distinct(true)->field('user_login')->select(); 生成的...
  • DISTINCT:用于返回唯一不同的值。 如:表中,一个列可能会包含多个重复值,DISTINCT语句仅仅列出不同的值。 命令: SELECT DISTINCT 列名 FROM 表名;  
  • 需求 查询小时气象表中 同一日期、同一城市、同意检测站点 首要污染物出现次数最多的记录 第一步: 添加 排序字段 select StationID,RecordDate,CityID,Primary_Pollutant,ROW_NUMBER() over(partition by ...
  • SELECT DISTINCT 语句(去重)

    千次阅读 2019-11-26 14:14:35
    关键词 DISTINCT 用于返回唯一不同的值。 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 如果要从 “Company” 列中选取所有的值,我们需要使用 SELECT 语句: SELECT Comp...
  • 今天用python抓取数据...如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999')
  • MyBatis-03 MyBatis XML方式之select元素

    万次阅读 2018-04-16 03:13:49
    select用法 根据用户id查询用户信息 1.UserMapper接口中添加接口方法 2. UserMapper.xml中配置resultMap和select元素 查询全部的SysUser 添加接口方法 配置UserMapper.xml 单元测试 基础测试类BaseMapperTest ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,773
精华内容 48,309
关键字:

select用于返回非重复记录