SQL查询计算包含两个不同Sr.no玩家的两个团队的平均得分与交换玩家

时间:2017-09-07 11:02:28

标签: sql sql-server

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)。

3 个答案:

答案 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