根据各队在比赛中的位置选出前 3 名并求和,并根据 SQL 中的升序排列的 3 个位置之和对各队进行排名

问题描述 投票:0回答:1

我在 sqlite 数据库中有一个名为

cc_results
的比赛表。

该表有 4 列:first_name、Last_name、Position、team_code。位置栏有每个运动员在比赛中的排名。

我想做一个sql语句,根据每个团队的位置选择前3名,然后将这3个团队的位置相加,然后按升序对团队进行排名。这如何在 SQL 中完成?

我已经尝试过:

SELECT team_code, Sum(place)
FROM cc_results
Group by team_code
Order by sum(place) asc

导致:

team_code   Sum(place)
PGS            2
TPS           11
MDC           13
SJP           15
GCA           18
SDTB          18
SMCS          19
SJG           20
SJC           24
BOCA          26
WC            44
AHS           77
SAAPS         91

我需要的是能够为每个团队选择前 3 个位置并将其相加。如果一支球队的人数少于 3 人,则不会对他们进行求和;如果他们的人数超过 3 人,则只对前 3 名进行求和。然后它们必须按升序排序/排名

sqlite sum rank group
1个回答
0
投票

使用 TMP_1 AS (选择团队代码 来自 CC_RESULT 按团队代码分组 计数 (*) >= 3 ), TMP_2 AS( 选择 * ,RANK() OVER(按团队代码分区,按位置描述排序)作为 MEMBER_RANK 来自 CC_RESULT 其中 1 = 1 AND TEAM_CODE IN(在 TMP_1 中选择 TEAM_CODE) ), TMP_3AS ( 选择 * 来自 TMP_2 其中 1 = 1 和会员_等级 <= 3 ) SELECT TEAM_CODE ,SUM(MEMBER_RANK) AS TOTAL_RANK FROM TMP_3 WHERE 1 = 1 GROUP BY TEAM_CODE ORDER BY SUM(MEMBER_RANK) ASC

希望对您有帮助。抱歉,格式不正确,因为我的手机设备不支持 snipet 编辑器

© www.soinside.com 2019 - 2024. All rights reserved.