首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql server中2名同级学生的积分计算

sql server中2名同级学生的积分计算
EN

Stack Overflow用户
提问于 2018-06-15 11:29:12
回答 4查看 59关注 0票数 2

Rank_Table

代码语言:javascript
复制
ID  Rank    
1   1   
2   1   
3   3   
4   3   
5   5   

价格

代码语言:javascript
复制
No  Points  
1   10  
2   9   
3   8   
4   7   
5   6   

预期产出

代码语言:javascript
复制
ID  Rank    Points  
1   1       9.5     
2   1       9.5     
3   3       7.5     
4   3       7.5     
5   5       6       

第二名不存在,因此第1点和第2点相加,分布在学生人数之间,如:(10+9) /2= 9.5

当我加入两个表时,就像

代码语言:javascript
复制
select *
from Rank_table a join
     Price b
     on a.ID = b.No

我得到的输出是

代码语言:javascript
复制
ID  Rank    No  Points  
1   1      1    10  
2   1      2    9   
3   3      3    8   
4   3      4    7   
5   5      5    6   
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-15 11:40:32

这似乎是一个非常简单的要求,只需使用AVG和一个OVER子句。

代码语言:javascript
复制
CREATE TABLE [Rank] (ID int, [Rank] int)
CREATE TABLE Price ([No] int, Points int);
GO

INSERT INTO [Rank]
VALUES
(1,1),   
(2,1),   
(3,3),   
(4,3),   
(5,5);   

INSERT INTO Price
VALUES
(1,10),  
(2,9),  
(3,8),  
(4,7),  
(5,6);
GO
SELECT R.ID,
       R.[Rank],
       AVG(CONVERT(decimal(2,0),P.Points)) OVER (PARTITION BY R.[Rank]) AS Points
FROM [Rank] R
     JOIN Price P ON R.ID = P.[No];

GO
DROP TABLE [Rank];
DROP TABLE Price;
票数 3
EN

Stack Overflow用户

发布于 2018-06-15 11:38:47

您需要简单的JOIN

代码语言:javascript
复制
select rn.*,
       avg(convert(decimal(10,0), p.Points)) over (partition by rn.rnk) as points
from Rank_Table rn inner join 
     Price p
     on p.id = rn.No;  
票数 2
EN

Stack Overflow用户

发布于 2018-06-15 11:35:08

嗯。您似乎希望基于“下一个”级别以及每一行中的级别进行非等号连接。不幸的是,Server 2008不支持lead(),但您可以使用apply

代码语言:javascript
复制
select rt.id, rt.rank, avg(p.price * 1.0) as points
from rank_table rt outer apply
     (select min(rt2.rank) as next_rank
      from rank_table rt2
      where rt2.rank > rt.rank
     ) rt2 left join
     price p
     on p.no >= rt.rank >= p.no and
        (p.no < rt2.next_rank or rt2.next_rank is null)
group by rt.id, rt.rank;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50874708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档