sql语句 说难不难 说易不易(50分)

  • 主题发起人 主题发起人 genglimin
  • 开始时间 开始时间
G

genglimin

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表 字段UserID,UserName,UserGroup,UserOrder

UserID UserName UserGroup UserOrder
1 aa 01 1
2 bb 01 2
3 cc 01 3
4 dd 02 1
5 ee 02 2
6 ff 03 1
7 gg 03 2

现在要查出每个Group,Order最大的一个 ,例如上面的查询结果应该是
UserID UserName UserGroup UserOrder
3 cc 01 3
5 ee 02 2
7 gg 03 2

该sql语句该如何写
 
select a.* from tab a,
(select usergroup,max(userorder) userorder from tab group by usergroup) b
where a.usergroup = b.usergroup and a.userorder=b.userorder
 
可以查下SQL复合查询的资料
 
我各位,如果是取每组的top n,即前n条记录.怎么取呢 ??
 
谢谢各位,ysai的方法可行,把该问题扩展一下,
UserID UserName UserGroup UserOrder1,UserOrder2,UserOrder3
1 aa 01 1 2 3
2 bb 01 1 3 2
3 cc 01 3 3 6
4 dd 02 1 6 8
5 ee 02 2 3 10
6 ff 02 2 3 5
7 gg 03 1 6 8
8 hh 03 2 7 8
9 ii 03 2 7 9

要查出每个group中,UserOrder1,UserOrder2,UserOrder3最大的记录,例如上面的查询结果
UserID UserName UserGroup UserOrder1,UserOrder2,UserOrder3
3 cc 01 3 3 6
5 ee 02 2 3 10
9 ii 03 2 7 9
 
需求不明确
>>要查出每个group中,UserOrder1,UserOrder2,UserOrder3最大的记录
要不其中一个最大,要不和最大,不可能要求3个都最大,虽然你的数据是3个都最大,但实际可能只有其中一个是最大
 
应该是UserGroup相同,保留UserORDER最大的记录
 
就是说先取UserOrder1最大的,如果UserOrder1最大的只有一条,就不用比较其他了,如果最大的不只是一条,那么再比较UserOrder1最大的中UserOrder2最大的
如果UserOrder1,UserOrder2都相同,再比较UserOrder3,例如这组
UserID UserName UserGroup UserOrder1,UserOrder2,UserOrder3
1 aa 01 1 2 3
2 bb 01 1 3 2
3 cc 01 3 3 6

3 cc 01 3 3 6
因为UserOrder1 = 3的最大
这组
UserID UserName UserGroup UserOrder1,UserOrder2,UserOrder3
4 dd 02 1 6 8
5 ee 02 2 3 10
6 ff 02 2 3 5

5 ee 02 2 3 10
另外UserID是唯一的
 
create table tab (userid int, username varchar(50), usergroup int, userorder1 int, userorder2 int, userorder3 int)
insert into tab values (1, 'a', 1, 1, 2, 3)
insert into tab values (2, 'b', 2, 1, 2, 3)
insert into tab values (3, 'c', 2, 2, 3, 1)
insert into tab values (4, 'd', 2, 2, 2, 2)
insert into tab values (5, 'e', 3, 1, 2, 3)

select a.* from tab a,(
select usergroup,max(str(userorder1,10)+str(userorder2,10)+str(userorder3,10)) calccol
from tab group by usergroup
)b
where a.usergroup = b.usergroup and str(userorder1,10)+str(userorder2,10)+str(userorder3,10) = calccol

drop table tab
表问WHY....想不出更好的办法
 
谢谢ysai,让你费心了,不过语句不对
 
不要告诉我你是ACCESS数据库......
如果是ACCESS数据库,把str函数换成ACCESS对应的函数就行了
 
是sqlserver,但你求的,是userorder1 + userorder2 + userorder3最大的,而不是依次比较
userorder1 , userorder2 , userorder3最大的,例如
UserID UserName UserGroup UserOrder1,UserOrder2,UserOrder3
1 aa 01 1 2 3
1 aa 01 1 10 10
1 aa 01 2 1 1

这时候应该选第三个(因为它UserOrder1最大) ,而不是第二个(虽然它userorder1 + userorder2 + userorder3最大)
 
麻烦楼主测试一下再说OK?
我的STR函数不是白用的
 
呵呵 我没仔细看 好用 分是你的了
 
后退
顶部