`

[转]SQL DISTINCT、GROUP BY

阅读更多

 

SQL DISTINCT重复的数据统计方法 group by 重复数据的个数统计 删除重复的数据2008-09-10 16:30DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。 
select count(distinct t.destaddr)     from nbyd_send t     where t.input_time > to_date('2007-2-1','yyyy-mm-dd') and t.input_time < to_date('2007-3-1','yyyy-mm-dd')

可以统计出一个月中的用户数量。

关于如何快速得知里面每一个号码重复的个数问题的解答:利用分组函数的SQL语句
select t.tel,count(*) from nbyd_deliver t   group   by t.tel ;group by 解决重复数据的个数统计适用于各种关系型数据库,如oracle,SQL Server

查询重复的数据
select * from (select v.xh,count(v.xh) num from sms.vehicle v group by v.xh) where num>1;--169

select v.xh,count(v.xh) num from sms.vehicle v group by v.xh having count(v.xh)=2;

删除重复的数据

create table mayong as (select distinct* from sms.vehicle);

delete from sms.vehicle ;

insert into sms.vehicle select * from mayong;

在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。


下面是查询重复数据的一个例子:

select a.rowid,a.* from 表名 a 
where a.rowid != 
(
select max(b.rowid) from 表名 b 
where a.字段1 = b.字段1 and 
a.字段2 = b.字段2 
)


下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。

而外面就是查询出除了rowid最大之外的其他重复的数据了。
由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:
delete from 表名 a 
where a.rowid != 
(
select max(b.rowid) from 表名 b 
where a.字段1 = b.字段1 and 
a.字段2 = b.字段2 
)


随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。
create table 临时表 as 
select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;
delete from 表名 a 
where a.rowid != 
(
select b.dataid from 临时表 b 
where a.字段1 = b.字段1 and 
a.字段2 = b.字段2 
);
commit;


二、对于完全重复记录的删除

对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
select distinct * from 表名
可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
CREATE TABLE 临时表 AS (select distinct * from 表名);
delete from table 正式表;
insert into 正式表 (select * from 临时表);
drop table 临时表;

分享到:
评论

相关推荐

    用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT

    用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT

    Mysql中distinct与group by的去重方面的区别

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个非常重要的SQL关键字,它们都可以用来处理数据的去重问题,但在实际应用中,两者的使用场景和效果有所差异。 首先,`DISTINCT` 关键字的主要作用是去除查询结果中...

    SQL 语法 SQL 总结 SQL教程

    SQL 基础 SQL 首页 SQL 简介 SQL 语法 ...SQL Group By SQL Having SQL ucase() SQL lcase() SQL mid() SQL len() SQL round() SQL now() SQL format() SQL 总结 SQL 快速索引 SQL 总结

    分析MySQL中优化distinct的技巧

    MySQL的优化器将`DISTINCT`操作转换为`GROUP BY`,使得查询在利用索引分组后,仅扫描一次所需的`nick`值。在新的执行计划中,`Using index for group-by`表明查询利用索引完成了分组操作,从而提高了效率。 通过...

    详解SQL中Group By的用法

    在SQL中,`GROUP BY`语句是数据分析和报表生成的核心工具之一,它允许我们根据一个或多个列的值对数据进行分组,并且通常与聚合函数一起使用,以对每个组进行计算。以下是关于`GROUP BY`用法的详细说明: 1. **基本...

    Mysql 行转列,列转行 SQL语句和示例表结构SQL

    MySQL 虽然没有内置的行转列和列转行函数,但通过 CASE、GROUP_CONCAT、UNION ALL 和 JOIN 等 SQL 语句,我们可以灵活地对数据进行转换,满足不同的数据分析需求。在实际应用中,应根据数据的特性和业务需求选择合适...

    sql 列转行

    set @sql = @sql + ' from tb group by name' exec(@sql) ``` 这条 SQL 语句将动态生成列转行语句,并执行该语句以获取结果。 添加平均分和总分 在获取学生的所有科目成绩后,我们还可以计算每个学生的平均分和...

    MySQL中distinct与group by语句的一些比较及用法讲解

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两种用于数据去重和分组统计的SQL语句,它们虽然都可以帮助我们处理重复数据,但有着不同的应用场景和执行机制。 1. `DISTINCT` 关键字: - `DISTINCT` 主要用于去除...

    SQL语句将行转换成列

    select @sql = @sql+' from 表 group by 物料代码' exec(@sql) 简化如下: select (select 物料代码 , sum(case 地区 when '地区' then 数量 end)[地区], sum(case 地区 when '地区' then 比率 end)[比率] ...

    LINQ to SQL手册

    6. **Group By/Having**:`Group By` 将数据按指定字段分组,`Having` 则用于在分组后过滤数据,类似 `WHERE` 但针对的是分组后的结果。 7. **Exists/In/Any/All/Contains**:这些谓词用于检查条件的存在性,如 `...

    SQL语言中GROUP BY子句的应用剖析.pdf

    SQL语言中GROUP BY子句的应用剖析 GROUP BY子句是SQL语言中一个强大的工具,用于对数据进行分组并进行汇总统计。通过对GROUP BY子句的执行过程分析,阐述了使用GROUP BY子句对数据进行分组的意义,并进一步剖析了...

    group by 语法大全,内附列子

    在数据库查询语言SQL中,`GROUP BY`语句是一种非常强大的工具,它能够帮助我们对数据进行分组处理,以便更好地进行数据分析和汇总。下面将详细介绍`GROUP BY`的基本语法、常用场景以及如何与其他SQL语句如聚合函数、...

    分组查询GROUP BY的使用与SQL执行顺序的讲解

    分组查询GROUP BY是SQL语言中用于对查询结果进行数据分组的关键子句,它允许我们将数据按照一个或多个列的值进行聚合。在使用GROUP BY时,有一些基本规则需要遵循: 1. GROUP BY子句可以包含任意数量的列,这意味着...

    Sql,oracle数据表行转列问题

    set @sql = @sql + ' from tb group by 姓名' exec(@sql) ``` 这个查询将生成一个新的表格,其中每一行对应一个学生,列对应不同的课程,单元格中的值对应该学生在该课程中的分数。 SQL SERVER 2005 静态 SQL 在...

    使用Distinct查询.rar

    `DISTINCT`是SQL中用于获取唯一数据的重要工具,可以单独使用,也可以与`WHERE`, `GROUP BY`等配合使用。在实际应用中,理解其工作原理,结合索引和优化策略,能够有效提升查询效率,同时满足业务需求。正确使用`...

    MySQL中distinct语句的基本原理及其与group by的比较

    在MySQL数据库中,`DISTINCT`和`GROUP BY`都是用于数据去重和分组的SQL语句,但它们有着不同的应用场景和优化策略。本文将深入探讨`DISTINCT`语句的基本原理,并与`GROUP BY`进行比较。 首先,`DISTINCT`关键字用于...

    oracle中使用group by优化distinct

    2. **使用`GROUP BY ROLLUP/CUBE/GROUPING SETS`**:这些高级`GROUP BY`技术可以组合不同的分组,以实现类似于`DISTINCT`的效果。例如,如果所有字段都需去重,可以使用`GROUP BY`加上所有字段,然后利用`ROLLUP`或`...

Global site tag (gtag.js) - Google Analytics