SQL根据某个字段分组查询:

时间:2022-03-16 15:12:25
SQL根据某个字段分组查询:SQL根据某个字段分组查询:/*jobid是工作编号*/
SQL根据某个字段分组查询:
create table tb (id int identity(1,1primary key,jobid char(12),company varchar(50),username varchar(20))
SQL根据某个字段分组查询:
insert into tb
SQL根据某个字段分组查询:
select '080402162220','IBM','jim' union all
SQL根据某个字段分组查询:
select '080402162220','DELL','John' union all
SQL根据某个字段分组查询:
select '080403162220','HP','Mary' union all
SQL根据某个字段分组查询:
select '080403162220','Lenovo','Kate' union all
SQL根据某个字段分组查询:
select '080404162220','Toshiba','Lucy' union all
SQL根据某个字段分组查询:
select '080404162220','Canoon','Lili' union all
SQL根据某个字段分组查询:
select '080405162220','Sony','Bush'
SQL根据某个字段分组查询:
-----------------------------------------------------------------------------------------------------------------------
SQL根据某个字段分组查询:
select * from tb a where not exists(select 1 from tb where jobid=a.jobid and id > a.id)

此表结构为(一对多)的关系,jobid为数据重复字段.

Follow SQL about group by DaWugui:

 

SQL根据某个字段分组查询:--按某一字段分组取最大(小)值所在行的数据
SQL根据某个字段分组查询:
(爱新觉罗.毓华 2007-10-23于浙江杭州)
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:数据如下:
SQL根据某个字段分组查询:name val memo
SQL根据某个字段分组查询:a    2   a2(a的第二个值)
SQL根据某个字段分组查询:a    1   a1--a的第一个值
SQL根据某个字段分组查询:a    3   a3:a的第三个值
SQL根据某个字段分组查询:b    1   b1--b的第一个值
SQL根据某个字段分组查询:b    3   b3:b的第三个值
SQL根据某个字段分组查询:b    2   b2b2b2b2
SQL根据某个字段分组查询:b    4   b4b4
SQL根据某个字段分组查询:b    5   b5b5b5b5b5
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
--创建表并插入数据:
SQL根据某个字段分组查询:
create table tb(name varchar(10),val int,memo varchar(20))
SQL根据某个字段分组查询:
insert into tb values('a',    2,   'a2(a的第二个值)')
SQL根据某个字段分组查询:
insert into tb values('a',    1,   'a1--a的第一个值')
SQL根据某个字段分组查询:
insert into tb values('a',    3,   'a3:a的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    1,   'b1--b的第一个值')
SQL根据某个字段分组查询:
insert into tb values('b',    3,   'b3:b的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    2,   'b2b2b2b2')
SQL根据某个字段分组查询:
insert into tb values('b',    4,   'b4b4')
SQL根据某个字段分组查询:
insert into tb values('b',    5,   'b5b5b5b5b5')
SQL根据某个字段分组查询:
go
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--一、按name分组取val最大的值所在行的数据。
SQL根据某个字段分组查询:--
方法1:
SQL根据某个字段分组查询:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
SQL根据某个字段分组查询:
--方法2:
SQL根据某个字段分组查询:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
SQL根据某个字段分组查询:
--方法3:
SQL根据某个字段分组查询:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
SQL根据某个字段分组查询:
--方法4:
SQL根据某个字段分组查询:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
SQL根据某个字段分组查询:
--方法5
SQL根据某个字段分组查询:
select a.* from tb a where 1 > (select count(*from tb where name = a.name and val > a.val ) order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          3           a3:a的第三个值
SQL根据某个字段分组查询:b          5           b5b5b5b5b5
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--二、按name分组取val最小的值所在行的数据。
SQL根据某个字段分组查询:--
方法1:
SQL根据某个字段分组查询:
select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
SQL根据某个字段分组查询:
--方法2:
SQL根据某个字段分组查询:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
SQL根据某个字段分组查询:
--方法3:
SQL根据某个字段分组查询:
select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
SQL根据某个字段分组查询:
--方法4:
SQL根据某个字段分组查询:
select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
SQL根据某个字段分组查询:
--方法5
SQL根据某个字段分组查询:
select a.* from tb a where 1 > (select count(*from tb where name = a.name and val < a.val) order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          1           a1--a的第一个值
SQL根据某个字段分组查询:b          1           b1--b的第一个值
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--三、按name分组取第一次出现的行所在的数据。
SQL根据某个字段分组查询:
select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          2           a2(a的第二个值)
SQL根据某个字段分组查询:b          1           b1--b的第一个值
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--四、按name分组随机取一条数据。
SQL根据某个字段分组查询:
select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          1           a1--a的第一个值
SQL根据某个字段分组查询:b          5           b5b5b5b5b5
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--五、按name分组取最小的两个(N个)val
SQL根据某个字段分组查询:
select a.* from tb a where 2 > (select count(*from tb where name = a.name and val < a.val ) order by a.name,a.val
SQL根据某个字段分组查询:
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
SQL根据某个字段分组查询:
select a.* from tb a where exists (select count(*from tb where name = a.name and val < a.val having Count(*< 2order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          1           a1--a的第一个值
SQL根据某个字段分组查询:a          2           a2(a的第二个值)
SQL根据某个字段分组查询:b          1           b1--b的第一个值
SQL根据某个字段分组查询:b          2           b2b2b2b2
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
--六、按name分组取最大的两个(N个)val
SQL根据某个字段分组查询:
select a.* from tb a where 2 > (select count(*from tb where name = a.name and val > a.val ) order by a.name,a.val
SQL根据某个字段分组查询:
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val descorder by a.name,a.val
SQL根据某个字段分组查询:
select a.* from tb a where exists (select count(*from tb where name = a.name and val > a.val having Count(*< 2order by a.name
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo                 
SQL根据某个字段分组查询:---------- ----------- -------------------- 
SQL根据某个字段分组查询:a          2           a2(a的第二个值)
SQL根据某个字段分组查询:a          3           a3:a的第三个值
SQL根据某个字段分组查询:b          4           b4b4
SQL根据某个字段分组查询:b          5           b5b5b5b5b5
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
--七,如果整行数据有重复,所有的列都相同。
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:数据如下:
SQL根据某个字段分组查询:name val memo
SQL根据某个字段分组查询:a    2   a2(a的第二个值)
SQL根据某个字段分组查询:a    1   a1--a的第一个值
SQL根据某个字段分组查询:a    1   a1--a的第一个值
SQL根据某个字段分组查询:a    3   a3:a的第三个值
SQL根据某个字段分组查询:a    3   a3:a的第三个值
SQL根据某个字段分组查询:b    1   b1--b的第一个值
SQL根据某个字段分组查询:b    3   b3:b的第三个值
SQL根据某个字段分组查询:b    2   b2b2b2b2
SQL根据某个字段分组查询:b    4   b4b4
SQL根据某个字段分组查询:b    5   b5b5b5b5b5
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
--在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。
SQL根据某个字段分组查询:--
创建表并插入数据:
SQL根据某个字段分组查询:
create table tb(name varchar(10),val int,memo varchar(20))
SQL根据某个字段分组查询:
insert into tb values('a',    2,   'a2(a的第二个值)')
SQL根据某个字段分组查询:
insert into tb values('a',    1,   'a1--a的第一个值')
SQL根据某个字段分组查询:
insert into tb values('a',    1,   'a1--a的第一个值')
SQL根据某个字段分组查询:
insert into tb values('a',    3,   'a3:a的第三个值')
SQL根据某个字段分组查询:
insert into tb values('a',    3,   'a3:a的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    1,   'b1--b的第一个值')
SQL根据某个字段分组查询:
insert into tb values('b',    3,   'b3:b的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    2,   'b2b2b2b2')
SQL根据某个字段分组查询:
insert into tb values('b',    4,   'b4b4')
SQL根据某个字段分组查询:
insert into tb values('b',    5,   'b5b5b5b5b5')
SQL根据某个字段分组查询:
go
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
select * , px = identity(int,1,1into tmp from tb
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
select m.name,m.val,m.memo from
SQL根据某个字段分组查询:(
SQL根据某个字段分组查询:  
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
SQL根据某个字段分组查询:) m 
where px = (select min(px) from
SQL根据某个字段分组查询:(
SQL根据某个字段分组查询:  
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
SQL根据某个字段分组查询:) n 
where n.name = m.name)
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
drop table tb,tmp
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo
SQL根据某个字段分组查询:---------- ----------- --------------------
SQL根据某个字段分组查询:a          1           a1--a的第一个值
SQL根据某个字段分组查询:b          1           b1--b的第一个值
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:(2 行受影响)
SQL根据某个字段分组查询:
*/

SQL根据某个字段分组查询:
--在sql server 2005中可以使用row_number函数,不需要使用临时表。
SQL根据某个字段分组查询:--
创建表并插入数据:
SQL根据某个字段分组查询:
create table tb(name varchar(10),val int,memo varchar(20))
SQL根据某个字段分组查询:
insert into tb values('a',    2,   'a2(a的第二个值)')
SQL根据某个字段分组查询:
insert into tb values('a',    1,   'a1--a的第一个值')
SQL根据某个字段分组查询:
insert into tb values('a',    1,   'a1--a的第一个值')
SQL根据某个字段分组查询:
insert into tb values('a',    3,   'a3:a的第三个值')
SQL根据某个字段分组查询:
insert into tb values('a',    3,   'a3:a的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    1,   'b1--b的第一个值')
SQL根据某个字段分组查询:
insert into tb values('b',    3,   'b3:b的第三个值')
SQL根据某个字段分组查询:
insert into tb values('b',    2,   'b2b2b2b2')
SQL根据某个字段分组查询:
insert into tb values('b',    4,   'b4b4')
SQL根据某个字段分组查询:
insert into tb values('b',    5,   'b5b5b5b5b5')
SQL根据某个字段分组查询:
go
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
select m.name,m.val,m.memo from
SQL根据某个字段分组查询:(
SQL根据某个字段分组查询:  
select * , px = row_number() over(order by name , val) from tb
SQL根据某个字段分组查询:) m 
where px = (select min(px) from
SQL根据某个字段分组查询:(
SQL根据某个字段分组查询:  
select * , px = row_number() over(order by name , val) from tb
SQL根据某个字段分组查询:) n 
where n.name = m.name)
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:
drop table tb
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:SQL根据某个字段分组查询:
/*
SQL根据某个字段分组查询:name       val         memo
SQL根据某个字段分组查询:---------- ----------- --------------------
SQL根据某个字段分组查询:a          1           a1--a的第一个值
SQL根据某个字段分组查询:b          1           b1--b的第一个值
SQL根据某个字段分组查询:
SQL根据某个字段分组查询:(2 行受影响)
SQL根据某个字段分组查询:
*/