SQL 查询不重复数据

sql不重复的查找统计数据
2007-06-29 11:04
例表如下:

表名:MYTEST

TID    COL1    COL2     COL3

1           1           A            A
2           1           A            A
3           2           A            A
4           2           B            A
5           3           B            B
6           3           B            B
7           4           C            B
8           4           C            B
9           1           A            A
10         2           B            A
1、查找表中的一个字段,重复的只找一个:

SELECT DISTINCT COL1 FROM MYTEST;

结果为:
1
2
3
4

2、查找表中的多个字段,其中某个字段不重复:

SELECT * FROM MYTEST WHERE rowid IN (SELECT    min(rowid) FROM MYTEST GROUP BY COL1);

结果为:
1           1           A            A
3           2           A            A
5           3           B            B
7           4           C            B

其中rowid为oracle中的虚拟column用来指向表中一个row的存放地址,改为其它的不能运行。(这样理解不知对不对?哪位朋友有更好的理解请给我留言。)

min方法若改为max时结果如下:
6          3          B          B
8          4          C          B
9          1          A          A
10        2          B          A

3、查询并统计该字段的数量。

SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;

结果为:
1          3
2          3
3          2
4          2

GROUP BY 哪个字段只能查找哪个字段和该字段的数量。若要同时搜索其它字段就报错。
即:
语句若改成    SELECT COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;
或    SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就会报错。

原因可能是:搜索的结果是一组组的数据。在每一组数据中,COL2有很多,所以不能搜索出唯一的一个值。。(这样理解不知对不对?哪位朋友有更好的理解请给我留言。)

4、从两个表中查询并统计数据

表T_OVERTIME字段
int tid = 0;//加班代码
float days = 0;//工日数

表T_OVERTIMEPERSONNEL字段
int tid = 0;//加班人员代码
int overtimeid = 0;//加班代码
int userid=0;//用户ID

统计每个用户的加班工日数
SELECT b.userid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY b.userid
以上是在oracle数据库中测试的结果。在其它数据库中不知是否能运行。欢迎大家提供更好更通用的方法。

5、按多个字段分组并统计

SELECT COL1, COL2, COUNT(*) AS Expr1
FROM mytest
GROUP BY COL1, COL2

结果为:
COL1    COL2    COUNT

1           A           3
     2           A           1
     2          B           2
     3           B           2
     4           C           2
即按COL1, COL2分组后COL1, COL2的内容和每组中记录的数量。

若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1
FROM mytest
GROUP BY COL1, COL2

结果为:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           1
若将第7条记录改为 7           4           C           C
则结果为:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           2
即按COL1, COL2分组后COL1, COL2的内容和每组中COL3不重复的记录数。

使用 DISTINCT 消除重复项
DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。例如,如果在 titleauthor 中选择所有作者 ID 时未使用 DISTINCT,那么将会返回下列行(其中包括一些重复的行):

USE pubs
SELECT au_id
FROM titleauthor

下面是结果集:

au_id       
----------- 
172-32-1176 
213-46-8915 
213-46-8915 
238-95-7766 
267-41-2394 
267-41-2394 
274-80-9391 
409-56-7008 
427-17-2319 
472-27-2349 
486-29-1786 
486-29-1786 
648-92-1872 
672-71-3249 
712-45-1867 
722-51-5454 
724-80-9391 
724-80-9391 
756-30-7391 
807-91-6654 
846-92-7186 
899-46-2035 
899-46-2035 
998-72-3567 
998-72-3567

时间: 2024-10-01 07:26:03

SQL 查询不重复数据的相关文章

sql查询删除重复数据

数据库UserInfo 删除重复数据 即删除重复的用户名手机号 同一个用户名手机号只保留一个用户 01.根据多个字段查询重复数据 with data1 as( select MobilePhone,Name from UserInfogroup by MobilePhone,Namehaving count(*)>1 ), 02.对重复数据分配编号 data2 as ( select u.*,row_number() over(partition by u.MobilePhone,u.Name

sql查询不重复数据

SELECT * FROM user WHERE Uid IN ( select min(Uid) from user group by Sid ) 原文地址:https://www.cnblogs.com/gjack/p/10326651.html

sql查询去除重复值语句

sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ************************************************************************************ 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select

sql 查询前十条数据

-- oracle sql 查询前十条数据 select * from b2c_code where rownum <= '10'; -- sql server 查询前十条数据 select top 10 * from b2c_code;

springboot JPA 一对多关联查询 ,动态复杂查询 去除重复数据 in语句使用

目的:根据图书的发布地区查询图书信息实现步骤:1 实体配置one: 图书信息 bookmany: 地区信息 bookarea实体映射,单向映射 book 中增加 area 的集合 并设置 @JoinColumn(name="bookid")@OneToMany bookarea中不需要设置关系 编写查询语句Repository 继承 JpaSpecificationExecutor 重写findAll 并实现 Specification接口的 public Predicate toPr

SQL语句删除重复数据

1.如表中没有主键,先添加自动增长主键 alter table 表名 add 列名 int identity (1,1) primary key 2.删除重复数据 delete from 表名 where id not in (select min(id) from 表名 group by id)

Spring Jdbc 自定义 ORM——sql查询对应Java数据对象

Target:  实现如下,通过Spring Jdbc,传入sql,查询满足条件的Java数据对象: pojo: public class ZmTest { public ZmTest() { // TODO Auto-generated constructor stub } private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) {

关于Hibernate查询出现重复数据的问题和解决方案

首先我说明一下我遇到的情况,以便正在阅读本文的你可以决定是否需要继续看下去: 假设我有一张表,里面有4个字段,分别叫做ABCD,主键是A,对应的我有一个pojo和一个hbm文件,pojo没什么,hbm文件里的<id>标签对应的却是B(也许你说怎么会有这种情况,其实实际情况是我在一个视图里遇到的这个问题,那里可不只有4个字段,我这么写是希望你能最快的理解). 好的,现在问题来了.....我使用了B作为条件查询了这张表,姑且我们定义这个条件为B=1,我的表里符合这个条件的数据有2条,当然它们的A字

SQL查询前五条数据及其他所有数据之和

知识管理反馈系统中,分析知识检索的办公室(北京上海天津香港纽约东京....苏州)来源,我需要查询哪些办公室次数较多,排出前5个,并计算出剩余所有部门的查询次数之和. 数据库是mysql. 1 拼出前五个 select sum(count) as total,location from tb_person group by location limit 5; 2.检索其他所有 理论上应该是: select '其它',sum(count) from tb_person where location