3支球队A,B和C在不同的日期相互比赛。下面给出了相同的数据:
ID Team1 Team2 Score
1 A B 5
2 B C 7
3 B A 6
4 B C 2
5 C A 0
6 A C 2
7 C A 9
8 A B 4
9 B C 1
10 C A 6
11 A C 4
编写一个SQL查询,它提供一对的输出及其平均分数。 (有3对AB,BC和CA)。
答案 0 :(得分:0)
试试这个...
;WITH source AS ( SELECT Team1, Team2,
Test = (CASE WHEN Team1 < Team2 THEN Team1 ELSE Team2 END
+ CASE WHEN Team1 > Team2 THEN Team1 ELSE Team2 END),score
FROM (
SELECT Distinct Team1, Team2,score
FROM score AS bd
) AS sub1
)
SELECT concat(MIN(s.Team1),MAX(s.Team2)) as Pair,avg(s.score) as score
FROM source AS s
GROUP BY s.Test;
它给出了一个输出:
Pair score
---- -----
AB 5
AC 4
BC 3
答案 1 :(得分:0)
创建测试数据:
select * into ##Matches
from (
select ID = 1, Team1 = 'A', Team2 = 'B', Score = 5
union select 2, 'B', 'C', 7
union select 3, 'B', 'A', 6
union select 4, 'B', 'C', 2
union select 5, 'C', 'A', 0
union select 6, 'A', 'C', 2
union select 7, 'C', 'A', 9
union select 8, 'A', 'B', 4
union select 9, 'B', 'C', 1
union select 10, 'C', 'A', 6
union select 11, 'A', 'C', 4)
这可能是最简单的解决方案。
select Team = iif(Team1 < Team2, Team1, Team2)
, Team = iif(Team1 < Team2, Team2, Team1)
, [Average Score] = avg(Score)
from ##Matches
group by iif(Team1 < Team2, Team1, Team2)
, iif(Team1 < Team2, Team2, Team1)
您订购团队,否则您将获得两组AB和BA。
答案 2 :(得分:-1)
Create table #Table (
ID int ,
Team1 char(1) ,
Team2 char(1) ,
Score int
)
insert into #Table
select 1 ,'A' ,'B', 5
union all select 2 ,'B' ,'C', 7
union all select 3 ,'B' ,'A', 6
union all select 4 ,'B' ,'C', 2
union all select 5 ,'C' ,'A', 0
union all select 6 ,'A' ,'C', 2
union all select 7 ,'C' ,'A', 9
union all select 8 ,'A' ,'B', 4
union all select 9 ,'B' ,'C', 1
union all select 10 ,'C' ,'A', 6
union all select 11 ,'A' ,'C', 4
select case when Team1 < Team2 then Team1 + Team2 else Team2 + Team1 end
TeamGroup , AVG (Score) AvgScore from #Table
group by case when Team1 < Team2 then Team1 + Team2 else Team2 + Team1 end