sql统计行数,但是需要去重中间的重复数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql统计行数,但是需要去重中间的重复数据相关的知识,希望对你有一定的参考价值。

参考技术A

userId: user id

url: url visited by the user

SELECT userId, COUNT(DISTINCT url)

FROM tab

GROUP BY userId

ORDER BY COUNT(DISTINCT url) DESC

扩展资料:

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;

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 )

SQL脚本去重分组统计

需求:首先有一张表记录学生姓名、科目和成绩,然后模拟插入几条数据,脚本如下:

create table score
(
       Name     nvarchar(20),--姓名
       subject  varchar(20),--科目
       grade    int--成绩       
);

insert into score(name,subject,grade) values(\'张三\',\'语文\',100);
insert into score(name,subject,grade) values(\'张三\',\'数学\',90);
insert into score(name,subject,grade) values(\'李四\',\'语文\',85);
insert into score(name,subject,grade) values(\'王五\',\'语文\',99);
insert into score(name,subject,grade) values(\'王五\',\'英语\',89);

现在我们需要得到一个结果,能根据姓名分组显示每个学生所参考的科目数量和总分数,期望结果如下:


那么我们需要写入的sql脚本如下:

select name 姓名, count(distinct subject) 科目, sum(grade) 总分
  from score
 group by name

然后就能得到上面结果了,重点是:count(distinct subject) 科目,再一次显示一下结果视图:

以上是关于sql统计行数,但是需要去重中间的重复数据的主要内容,如果未能解决你的问题,请参考以下文章

统计HIVE字段行数NULL行数字段重复行数

[SQL]597(表2行数/表1行数)+602(表的上下拼接)

SQL 查询优化。估计与实际行数

python统计c++源程序文件中不重复代码行数

统计HBase表行数的四种方式

SQL Server遍历所有表统计行数