select语句中的取 MAX值的问题。

liyanping88 2005-12-20 11:42:35
我现在作个论坛,其中用户的等级类似CSDN,要根据用户在各小类的专家分Score来定,如果在该小类Column无得分,则等级为1。如果有分则如此计算:

Score < 100 THEN 1
Score >= 100 and Score < 500 THEN 2
Score >= 500 and Score < 1000 THEN 3
Score >= 1000 and Score < 2000 THEN 4
Score >= 2000 THEN 5

有个表User 包括:

UserID UserName NickName

1 WenTao 文涛
2 HuangJi 黄京
3 zhoung 赵天

还有个表 UserScore 记录在某一个人在各个论坛的积分

UserID ColumnID Score
1 1 400
1 2 50
3 1 70
2 3 2000
2 4 30
现在要根据一个用户名来列出该用户的详细信息,包括答复者的用户名、昵称、用户在所有类别中的最高等级。如果作者在所有论坛小类都没有积分,则等级为 1.(就是这里搞不定)。比如我要列出 UserName=zhoung 的信息,包括他得最高分的类别Column,该如何写SELECT语句?
...全文
1695 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw1a2 2005-12-20
  • 打赏
  • 举报
回复
上次的问题还没解决?
WangZWang 2005-12-20
  • 打赏
  • 举报
回复
SELECT a.PKID, a.UserName, a.NickName,
UserLevelUp=MAX(CASE WHEN (ISNULL(d.Score,0) < 100) THEN 1
WHEN (d.Score >= 100 and d.Score < 500) THEN 2
WHEN (d.Score >= 500 and d.Score < 1000) THEN 3
WHEN (d.Score >= 1000 and d.Score < 2000) THEN 4
WHEN (d.Score >= 2000) THEN 5 END)
from UserScore d left join [User] a on a.PKID=d.UserID
WHERE a.UserName = @UserName
group by a.PKID, a.UserName, a.NickName
zhaoanle 2005-12-20
  • 打赏
  • 举报
回复
--测试数据
create table user1(userid int,username varchar(10),nickname varchar(10))
create table userscore(userid int,columnid int,score int)
insert user1 values(1, 'WenTao', '文涛')
insert user1 values(2, 'HuangJi', '黄京')
insert user1 values(3, 'zhoung', '赵天')
insert user1 values(4, 'zho', '仍天')
insert userscore values(1,1,400)
insert userscore values(1,2,50)
insert userscore values(3,1,70)
insert userscore values(2,3,2000)
insert userscore values(2,4,30)
--查询
declare @name varchar(10)
set @name='huangji'

select c.userid,c.username,c.nickname,isnull(d.columnid,1) as columnid,c.score,
(case when c.score<100 then 1 when c.Score >= 100 and c.Score < 500 THEN 2 when c.Score >= 500 and c.Score < 1000 THEN 3
when c.Score >= 1000 and c.Score < 2000 THEN 4 else 5 end) as '等级'
from userscore d,
(select a.userid,a.username,a.nickname,max(case when score is null then 0 else score end) as score
from user1 a,userscore b
where a.userid*=b.userid
group by a.userid,a.username,a.nickname) c
where c.score*=d.score and c.username=@name
--结果
userid username nickname columnid score 等级
----------- ---------- ---------- ----------- ----------- -----------
2 HuangJi 黄京 3 2000 5

(所影响的行数为 1 行)
liyanping88 2005-12-20
  • 打赏
  • 举报
回复
比如 @UserName = HuangJi
得到: UserName = HuangJi , NickName = 黄京, UserLevelUp= 5 , ColumnID = 3
cuckoojosh 2005-12-20
  • 打赏
  • 举报
回复
能不能把你想要的结果列出来啊?
liyanping88 2005-12-20
  • 打赏
  • 举报
回复
如果用户在全部类别都没有得分,最大等级的ColumnID可以默认为 1
liyanping88 2005-12-20
  • 打赏
  • 举报
回复
我这样写结果出现错误,另外最大值的ColumnID也不知怎么选出来:
SELECT a.PKID,
a.UserName,
a.NickName,
UserLevelUp=select MAX(CASE WHEN (ISNULL(d.Score,0) < 100) THEN 1
WHEN (d.Score >= 100 and d.Score < 500) THEN 2
WHEN (d.Score >= 500 and d.Score < 1000) THEN 3
WHEN (d.Score >= 1000 and d.Score < 2000) THEN 4
WHEN (d.Score >= 2000) THEN 5
END)
from UserScore d
WHERE a.PKID*=d.UserID


FROM [User] a
WHERE a.UserName = @UserName
liyanping88 2005-12-20
  • 打赏
  • 举报
回复
WangZWang(阿来) 的SELECT在搜索的用户有Score的时候有效,如果用户在所有的分类都没有Score时就会出错。
liyanping88 2005-12-20
  • 打赏
  • 举报
回复
对不起,刚刚上班。 zhaoanle(zhao)的测试过对了,正在测试 WangZWang(阿来)的

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧