22,209
社区成员
发帖
与我相关
我的任务
分享
if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;
go
create table #temp( [ScoreId] int, [BRNO] int, [PlanId] int, [USID] varchar(100), [TotalScore] DECIMAL(10,2), [SubmitDate] varchar(100), [WithTime] bigint, [IdPlan] int, [QueryType] int, [USNM] varchar(100), [NamePlan] varchar(100), [ClassName] varchar(100));
insert #temp
select '327','1','9','S0001','10','8月26日','1481330','13','5','学生1','a竞赛','201301班' union all
select '328','1','9','S0002','5','8月26日','1469268','13','5','张丽','a竞赛','201301班' union all
select '329','1','9','S0003','15','8月28日','1623584','13','5','张飞','a竞赛','201301班' union all
select '330','1','9','s0004','0','7月18日','30','13','5','学生4','a竞赛','201301班' union all
select '331','1','9','s0005','48','8月9日','20','13','5','212','a竞赛','201301班' union all
select '332','1','9','s0006','48','8月9日','20','13','5','学生6','a竞赛','201301班' union all
select '349','1','5','s0003','1.7','8月28日','109','13','6','张飞','a竞赛','201301班' union all
select '350','1','5','s0002','3.16','8月28日','252','13','6','张丽','a竞赛','201301班' union all
select '351','1','5','S0001','4.76','8月28日','260','13','6','学生1','a竞赛','201301班' union all
select '352','1','5','s0001','0','8月28日','1800','18','6','学生1','b竞赛','金融201301班'
--SQL:
SELECT m.*
FROM ( SELECT RANK() OVER (PARTITION BY NamePlan ORDER BY SUM(TotalScore) DESC, SUM(WithTime)) AS 名次 ,
USID AS 账户 ,
SUM(WithTime) AS 用时 ,
SUM(TotalScore) 总分 ,
NamePlan AS 竞赛名称,
COUNT(*) OVER(PARTITION BY NamePlan) AS 人数
FROM #temp
WHERE BRNO = 1
GROUP BY USID ,
NamePlan
) m
ORDER BY 竞赛名称, 名次
/*
名次 账户 用时 总分 竞赛名称 人数
1 s0005 20 48.00 a竞赛 6
1 s0006 20 48.00 a竞赛 6
3 S0003 1623693 16.70 a竞赛 6
4 S0001 1481590 14.76 a竞赛 6
5 s0002 1469520 8.16 a竞赛 6
6 s0004 30 0.00 a竞赛 6
1 s0001 1800 0.00 b竞赛 1
*/
if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;
go
create table #temp( [ScoreId] int, [BRNO] int, [PlanId] int, [USID] varchar(100), [TotalScore] DECIMAL(10,2), [SubmitDate] varchar(100), [WithTime] bigint, [IdPlan] int, [QueryType] int, [USNM] varchar(100), [NamePlan] varchar(100), [ClassName] varchar(100));
insert #temp
select '327','1','9','S0001','10','8月26日','1481330','13','5','学生1','a竞赛','201301班' union all
select '328','1','9','S0002','5','8月26日','1469268','13','5','张丽','a竞赛','201301班' union all
select '329','1','9','S0003','15','8月28日','1623584','13','5','张飞','a竞赛','201301班' union all
select '330','1','9','s0004','0','7月18日','30','13','5','学生4','a竞赛','201301班' union all
select '331','1','9','s0005','48','8月9日','20','13','5','212','a竞赛','201301班' union all
select '332','1','9','s0006','48','8月9日','20','13','5','学生6','a竞赛','201301班' union all
select '349','1','5','s0003','1.7','8月28日','109','13','6','张飞','a竞赛','201301班' union all
select '350','1','5','s0002','3.16','8月28日','252','13','6','张丽','a竞赛','201301班' union all
select '351','1','5','S0001','4.76','8月28日','260','13','6','学生1','a竞赛','201301班' union all
select '352','1','5','s0001','0','8月28日','1800','18','6','学生1','b竞赛','金融201301班'
--SQL:
SELECT m.*
FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY NamePlan ORDER BY SUM(TotalScore) DESC, SUM(WithTime)) AS 名次 ,
USID AS 账户 ,
SUM(WithTime) AS 用时 ,
SUM(TotalScore) 总分 ,
NamePlan AS 竞赛名称,
COUNT(*) OVER(PARTITION BY NamePlan) AS 人数
FROM #temp
WHERE BRNO = 1
GROUP BY USID ,
NamePlan
) m
WHERE 账户 = 'S0001'
ORDER BY 名次
/*
名次 账户 用时 总分 竞赛名称 人数
1 s0001 1800 0.00 b竞赛 1
4 S0001 1481590 14.76 a竞赛 6
*/
if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;
go
create table #temp( [ScoreId] int, [BRNO] int, [PlanId] int, [USID] varchar(100), [TotalScore] DECIMAL(10,2), [SubmitDate] varchar(100), [WithTime] bigint, [IdPlan] int, [QueryType] int, [USNM] varchar(100), [NamePlan] varchar(100), [ClassName] varchar(100));
insert #temp
select '327','1','9','S0001','10','8月26日','1481330','13','5','学生1','a竞赛','201301班' union all
select '328','1','9','S0002','5','8月26日','1469268','13','5','张丽','a竞赛','201301班' union all
select '329','1','9','S0003','15','8月28日','1623584','13','5','张飞','a竞赛','201301班' union all
select '330','1','9','s0004','0','7月18日','30','13','5','学生4','a竞赛','201301班' union all
select '331','1','9','s0005','48','8月9日','20','13','5','212','a竞赛','201301班' union all
select '332','1','9','s0006','48','8月9日','20','13','5','学生6','a竞赛','201301班' union all
select '349','1','5','s0003','1.7','8月28日','109','13','6','张飞','a竞赛','201301班' union all
select '350','1','5','s0002','3.16','8月28日','252','13','6','张丽','a竞赛','201301班' union all
select '351','1','5','S0001','4.76','8月28日','260','13','6','学生1','a竞赛','201301班' union all
select '352','1','5','s0001','0','8月28日','1800','18','6','学生1','b竞赛','金融201301班'
--结果里为什么有个?号呢?
--SQL:
SELECT m.*
FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY NamePlan ORDER BY SUM(TotalScore) DESC, SUM(WithTime)) AS 名次 ,
USID AS 账户 ,
SUM(WithTime) AS 用时 ,
SUM(TotalScore) 总分 ,
NamePlan AS 竞赛名称,
(SELECT COUNT(*) FROM #temp x WHERE x.NamePlan=a.NamePlan) AS 人数
FROM #temp a
WHERE BRNO = 1
GROUP BY USID ,
NamePlan
) m
WHERE 账户='S0001'
ORDER BY 竞赛名称, 名次
/*
名次 账户 用时 总分 竞赛名称 人数
4 S0001 1481590 14.76 a竞赛 9
1 s0001 1800 0.00 b竞赛 1
*/