Home » Count Team Wins

Count Team Wins

List the Teams and the number of matches won by them. In case of equal score i.e. draw that won’t be considered.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 46
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Count Team Wins with Power Query

Power Query solution 1 for Count Team Wins, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  WhoWon = Table.AddColumn(
    Source, 
    "Team", 
    each [
      a = Text.Split([Result], "-"), 
      b = List.Transform(a, Number.From), 
      c = if b{0} > b{1} then [Team 1] else if b{0} < b{1} then [Team 2] else null
    ][c]
  ), 
  Teams = List.Distinct(Source[Team 1] & Source[Team 2]), 
  Wins = List.Transform(Teams, (f) => List.Count(List.Select(WhoWon[Team], (x) => x = f))), 
  Result = Table.Sort(Table.FromColumns({Teams, Wins}, {"Team", "Wins"}), {"Wins", 1})
in
  Result
Power Query solution 2 for Count Team Wins, proposed by Luan Rodrigues:
let
  Fonte = Excel.CurrentWorkbook(){[Name = "Tabela1"]}[Content], 
  Div = Table.SplitColumn(
    Fonte, 
    "Result", 
    Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), 
    {"Result.1", "Result.2"}
  ), 
  Tab = Table.AddColumn(
    Div, 
    "Personalizar", 
    each 
      if Number.From([Result.2]) = Number.From([Result.1]) then
        null
      else if Number.From([Result.1]) > Number.From([Result.2]) then
        [Team 1]
      else if Number.From([Result.2]) > Number.From([Result.1]) then
        [Team 2]
      else
        null
  ), 
  Team = Table.RenameColumns(
    Table.FromList(List.Distinct(Tab[Team 1] & Tab[Team 2])), 
    {{"Column1", "Team"}}
  ), 
  Mesc = Table.NestedJoin(Team, {"Team"}, Tab, {"Personalizar"}, "Tabela", JoinKind.LeftOuter), 
  Result = Table.Sort(
    Table.AddColumn(Mesc, "No. of Wins", each List.Count([Tabela][Personalizar]))[
      [Team], 
      [No. of Wins]
    ], 
    {{"No. of Wins", Order.Descending}}
  )
in
  Result
Power Query solution 3 for Count Team Wins, proposed by Brian Julius:
let
  Source = MatchesRaw, 
  Split = Table.SplitColumn(
    Source, 
    "Result", 
    Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), 
    {"Result.1", "Result.2"}
  ), 
  ChangeType = Table.TransformColumnTypes(
    Split, 
    {{"Result.1", Int64.Type}, {"Result.2", Int64.Type}}
  ), 
  Winner = Table.AddColumn(
    ChangeType, 
    "Team", 
    each 
      if [Result.1] > [Result.2] then
        [Team 1]
      else if [Result.2] > [Result.1] then
        [Team 2]
      else
        null
  ), 
  Group = Table.Group(Winner, {"Team"}, {{"No. of Wins", each Table.RowCount(_), Int64.Type}}), 
  Filter = Table.SelectRows(Group, each ([Team] <> null)), 
  Merge = Table.NestedJoin(Source, {"Team 1"}, Filter, {"Team"}, "Temp", JoinKind.LeftOuter), 
  Expand = Table.ExpandTableColumn(Merge, "Temp", {"No. of Wins"}, {"No. of Wins"}), 
  RemoveCols = Table.RemoveColumns(Expand, {"Team 2", "Result"}), 
  Dupes = Table.Distinct(RemoveCols, {"Team 1"}), 
  Sort = Table.Sort(Dupes, {{"No. of Wins", Order.Descending}}), 
  Rename = Table.RenameColumns(Sort, {{"Team 1", "Team"}})
in
  Rename
Power Query solution 4 for Count Team Wins, proposed by Brian Julius:
                    
                  
Power Query solution 5 for Count Team Wins, proposed by Matthias Friedmann:
let
  Source = Excel.CurrentWorkbook(){[Name = "WonMatches"]}[Content], 
  #"Unpivoted Columns" = Table.UnpivotOtherColumns(Source, {"Result"}, "Attribute", "Team"), 
  #"Added Custom" = Table.AddColumn(
    #"Unpivoted Columns", 
    "Winner", 
    each 
      if Expression.Evaluate([Result]) > 0 and [Attribute] = "Team 1" then
        1
      else if Expression.Evaluate([Result]) < 0 and [Attribute] = "Team 2" then
        1
      else
        0
  ), 
  #"Grouped Rows" = Table.Group(
    #"Added Custom", 
    {"Team"}, 
    {{"No. of Wins", each List.Sum([Winner]), Int64.Type}}
  ), 
  #"Sorted Rows" = Table.Sort(#"Grouped Rows", {{"No. of Wins", Order.Descending}})
in
  #"Sorted Rows"
Power Query solution 6 for Count Team Wins, proposed by Antriksh Sharma:
let
  Source = DataSource, 
  TableToRecord = Table.ToRecords(Source), 
  Transformation = List.Transform(
    TableToRecord, 
    (Row) =>
      let
        TeamList = Record.ToList(Record.RemoveFields(Row, "Result")), 
        MatchesWonList = List.Transform(Text.Split(Row[Result], "-"), each Number.From(_)), 
        HasOneValue = List.Count(List.Distinct(MatchesWonList)) = 1, 
        Check = 
          if HasOneValue then
            {TeamList} & {List.Repeat({null}, List.Count(TeamList))}
          else
            {TeamList} & {MatchesWonList}, 
        NewTable = Table.Sort(
          Table.FromColumns(Check, type table [Team = text, Score = Int64.Type]), 
          {"Score", Order.Descending}
        ), 
        Winner = Table.FirstN(NewTable, 1)
      in
        Winner
  ), 
  CombineTable = Table.Combine(Transformation), 
  GroupedRows = Table.Group(
    CombineTable, 
    {"Team"}, 
    {{"Count", each List.NonNullCount(_[Score]), Int64.Type}}
  )
in
  GroupedRows
Power Query solution 7 for Count Team Wins, proposed by Thomas DUCROQUETZ:
let
  Source = Table.FromRows(
    Json.Document(
      Binary.Decompress(
        Binary.FromText(
          "i45Wcs5IzSlOTVTSUQpKTcxR8E1MKcpMAfIMdc2VYnWi0US9SstS80pKi4FMS11DsAIkIYRZJromWHS7KTgrOCUWJafm5OeBVJnpWoBVoYsjGWkENcgRqMQ3MycxD8Uac6gj0Q1AVg10pwFYEUIbunITXVMMS1BdbqpriaECyZXGukZKsbEA", 
          BinaryEncoding.Base64
        ), 
        Compression.Deflate
      )
    ), 
    let
      _t = ((type nullable text) meta [Serialized.Text = true])
    in
      type table [#"Team 1" = _t, #"Team 2" = _t, Result = _t]
  ), 
  UnpivotTeams = Table.UnpivotOtherColumns(Source, {"Result"}, "TeamType", "Team"), 
  GetWins = Table.ReplaceValue(
    UnpivotTeams, 
    each [Result], 
    each 
      let
        GoalsCurrentTeam = Number.From(
          if [TeamType] = "Team 1" then
            Text.BeforeDelimiter([Result], "-")
          else
            Text.AfterDelimiter([Result], "-")
        ), 
        GoalsOpponent = Number.From(
          if [TeamType] = "Team 2" then
            Text.BeforeDelimiter([Result], "-")
          else
            Text.AfterDelimiter([Result], "-")
        )
      in
        if GoalsCurrentTeam > GoalsOpponent then 1 else 0, 
    Replacer.ReplaceValue, 
    {"Result"}
  ), 
  Grouped = Table.Group(GetWins, {"Team"}, {{"No. of Wins", each List.Sum([Result]), type number}})
in
  Grouped
Power Query solution 8 for Count Team Wins, proposed by Fowmy Abdulmuttalib:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Tlist = Table.FromList(List.Distinct(Source[Team 1] & Source[Team 2]), null, {"Teams"}), 
  WinTeams = Table.AddColumn(
    Source, 
    "Winners", 
    each 
      let
        T1G  = Number.From(Text.BeforeDelimiter([Result], "-")), 
        T2G  = Number.From(Text.AfterDelimiter([Result], "-")), 
        Twin = if T1G > T2G then [Team 1] else if T1G < T2G then [Team 2] else null
      in
        Twin
  )[Winners], 
  Result = Table.AddColumn(
    Tlist, 
    "No of Wins", 
    (i) => List.Count(List.Select(WinTeams, each _ = i[Teams]))
  )
in
  Result

Solving the challenge of Count Team Wins with Excel

Excel solution 1 for Count Team Wins, proposed by John V.:
=LET(r,
    C2:C11,
    d,
    TEXTBEFORE(
        r,
        "-"
    )-TEXTAFTER(
        r,
        "-"
    ),
    u,
    UNIQUE(
        TOCOL(
            A2:B11
        )
    ),
    SORT(HSTACK(u,
    MAP(u,
    LAMBDA(x,
    SUM(--(IFS(
        d>0,
        A2:A11,
        d<0,
        B2:B11,
        1,
        
    )=x))))),
    2,
    -1))
Excel solution 2 for Count Team Wins, proposed by محمد حلمي:
=LET(c,
    C2:C11,
    m,
    A2:A11,
    h,
    B2:B11,
    w,
    -TEXTBEFORE(
        c,
        "-"
    )+TEXTAFTER(
        c,
        "-"
    ),
    a,
    FILTER(
        m,
        -w>0
    ),
    b,
    FILTER(
        h,
        w>0
    ),
    i,
    VSTACK(
        a,
        b
    ),
    o,
    MAP(i,
    LAMBDA(a,
    SUM(--(i=a)))),
    q,
    UNIQUE(
        VSTACK(
            m,
            h
        )
    ),
    
z,
    UNIQUE(
        HSTACK(
            i,
            o
        )
    ),
    y,
    UNIQUE(
        IFNA(
            IF(
                XMATCH(
                    q,
                    INDEX(
                        z,
                        ,
                        1
                    )
                ),
                ""
            ),
            q
        ),
        ,
        1
    ),
    IFNA(
        VSTACK(
            z,
            y
        ),
        
    ))
Excel solution 3 for Count Team Wins, proposed by محمد حلمي:
=LET(
c,
    C2:C11,
    
a,
    TEXTBEFORE(
        c,
        "-"
    )-TEXTAFTER(
        c,
        "-"
    ),
    
v,
    IF(
        a>0,
        A2:A11,
        IF(
            a<0,
            B2:B11
        )
    ),
    
r,
    UNIQUE(
        TOCOL(
            A2:B11
        )
    ),
    
o,
    MAP(r,
    LAMBDA(x,
    SUM(--(x=v)))),
    
SORT(
    HSTACK(
        r,
        o
    ),
    2,
    -1
))
Excel solution 4 for Count Team Wins, proposed by 🇰🇷 Taeyong Shin:
=LET(r,
    C2:C11,
    n,
    TEXTBEFORE(
        r,
        "-"
    )-TEXTAFTER(
        r,
        "-"
    ),
    GROUPBY(IF(
        n>0,
        A2:A11,
        B2:B11
    ),
    --(n<>0),
    SUM,
    ,
    0,
    -2))
Excel solution 5 for Count Team Wins, proposed by 🇰🇷 Taeyong Shin:
=LET(Team1, A2:A11, Team2, B2:B11, Score, C2:C11,
 Win, SWITCH( SIGN(EVAL(Score)), 1, Team1, -1, Team2, NA()),
 Uteam, UNIQUE(VSTACK(Team1, Team2)),
 Body, HSTACK(Uteam, MAP(Uteam, LAMBDA(m, COUNT( 1/(Win=m) ) )) ),
 VSTACK( {"Team","No. of Wins"}, SORT(Body, 2, -1) )
)

EVAL = LAMBDA(values, EVALUATE(values) )
Excel solution 6 for Count Team Wins, proposed by Julian Poeltl:
=LET(
    T,
    A2:A11,
    TT,
    B2:B11,
    R,
    C2:C11,
    A,
    --TEXTAFTER(
        R,
        "-"
    ),
    B,
    --TEXTBEFORE(
        R,
        "-"
    ),
    W,
    IF(
        A>B,
        TT,
        IF(
            A=B,
            "",
            T
        )
    ),
    U,
    UNIQUE(
        VSTACK(
            T,
            TT
        )
    ),
    RE,
    SORT(
        HSTACK(
            U,
            MAP(
                U,
                LAMBDA(
                    A,
                    SUM(
                        IF(
                            NOT(
                                ISERR(
                                    FILTER(
                                        W,
                                        W=A
                                    )
                                )
                            ),
                            1,
                            0
                        )
                    )
                )
            )
        ),
        2,
        -1
    ),
    RE
)
Excel solution 7 for Count Team Wins, proposed by Aditya Kumar Darak 🇮🇳:
= LET(
 _t1,
    
 A2:A11,
    
 _t2,
    
 B2:B11,
    
 _ts1,
    
 --TEXTBEFORE(
     C2:C11,
      "-"
 ),
    
 _ts2,
    
 --TEXTAFTER(
     C2:C11,
      "-"
 ),
    
 _calc,
    
 IFS(
     _ts1 > _ts2,
      _t1,
      _ts1 < _ts2,
      _t2,
      TRUE,
      ""
 ),
    
 _ut,
    
 UNIQUE(
     VSTACK(
         _t1,
          _t2
     )
 ),
    
 _win,
    
 MAP(_ut,
     LAMBDA(a,
     SUM(--(_calc = a)))),
    
 SORT(
     HSTACK(
         _ut,
          _win
     ),
      2,
      -1
 ))
Excel solution 8 for Count Team Wins, proposed by Timothée BLIOT:
=LET(
Array,
    A2:C11,
    

team1,
     INDEX(
         Array,
         ,
         1
     ),
    
team2,
     INDEX(
         Array,
         ,
         2
     ),
    
Result,
    INDEX(
        Array,
        ,
        3
    ),
    

Teams,
     UNIQUE(
         VSTACK(
             team1,
             team2
         )
     ),
    

Goals,
     HSTACK(
         VALUE(
             TEXTBEFORE(
                 Result,
                 "-"
             )
         ),
          VALUE(
              TEXTAFTER(
                  Result,
                  "-"
              )
          )
     ),
    

Victories,
     IF(
         INDEX(
             Goals,
             ,
             1
         )>INDEX(
             Goals,
             ,
             2
         ),
         {1,
         0},
         
         IF(
             INDEX(
             Goals,
             ,
             1
         )=INDEX(
             Goals,
             ,
             2
         ),
             {0,
             0},
             {0,
             1}
         )
     ),
    

FilterArray,
     HSTACK(VSTACK(
             team1,
             team2
         ),
     (VSTACK(
         INDEX(
             Victories,
             ,
             1
         ),
         INDEX(
             Victories,
             ,
             2
         )
     ))),
    

TeamsWins,
     BYROW(
         Teams,
          LAMBDA(
              r,
              
              SUM(
                  FILTER(
                      INDEX(
                          FilterArray,
                          ,
                          2
                      ),
                       INDEX(
                           FilterArray,
                           ,
                           1
                       ) = r,
                       ""
                  )
              )
              
          )
     ),
    

Output,
     HSTACK(
         Teams,
         TeamsWins
     ),
    

SORT(
    Output,
    2,
    -1
))
Excel solution 9 for Count Team Wins, proposed by Hussein SATOUR:
=LET(a, A2:C11,
b, BYROW(a, LAMBDA(x, LET(y, TEXTSPLIT(INDEX(x,,3),"-")*1, z, INDEX(CHOOSECOLS(x,1,2),, IF(SUM(y)/2 = INDEX(y,,1), 3, XMATCH(MAX(y), y))), z))),
c, UNIQUE(TOCOL(CHOOSECOLS(a, 1, 2))), d, ARRAYTOTEXT(b),
SORT(HSTACK(c, BYROW(c, LAMBDA(x, (LEN(d) - LEN(SUBSTITUTE(d, x, ""))) / LEN(x)))), 2,-1))
Excel solution 10 for Count Team Wins, proposed by Duy Tùng:
=LET(
    a,
    MMULT(
        -TEXTSPLIT(
            ARRAYTOTEXT(
                C2:C11
            ),
            "-",
            ", "
        ),
        {-1;1}
    ),
    GROUPBY(
        TOCOL(
            A2:B11
        ),
        TOCOL(
            --IF(
                {1,
                0},
                a>0,
                a<0
            )
        ),
        SUM,
        ,
        0,
        -2
    )
)
Excel solution 11 for Count Team Wins, proposed by Bhavya Gupta:
=LET(Team_1,
    A2:A11,
    Team_2,
    B2:B11,
    Result,
    C2:C11,
    U_teams,
    UNIQUE(
        TOCOL(
            HSTACK(
                Team_1,
                Team_2&
            )
        )
    ),
    SORT(HSTACK(U_teams,
    REDUCE(0,
    MAP(
        Team_1,
        Team_2,
        Result,
        LAMBDA(
            t_1,
            t_2,
            r_s,
            LET(
                a,
                TEXTSPLIT(
                    r_s,
                    "-"
                )*1,
                IF(
                    COLUMNS(
                        UNIQUE(
                            a,
                            TRUE
                        )
                    )=1,
                    0,
                    DROP(
                        SORTBY(
                            HSTACK(
                                t_1,
                                t_2
                            ),
                            a
                        ),
                        ,
                        1
                    )
                )
            )
        )
    ),
    LAMBDA(a,
    b,
    (b=U_teams)*1+a))),
    2,
    -1))
Excel solution 12 for Count Team Wins, proposed by Charles Roldan:
=LET(
 _Matches,
     A2:B11,
    
 _Score,
     C2:C11,
    
 _Goals,
     --TEXTSPLIT(
         ARRAYTOTEXT(
             _Score
         ),
          "-",
          ", "
     ),
    
 _Wins,
     --(_Goals > BYROW(
         _Goals,
          MIN
     )),
    
 GROUPBY(
     TOCOL(
         _Matches
     ),
      TOCOL(
          _Wins
      ),
      SUM,
      ,
      0,
      -2
 )
)
Excel solution 13 for Count Team Wins, proposed by Charles Roldan:
=LET(
 _Matches,
     A2:B11,
    
 _Score,
     C2:C11,
    
 _Goals,
     --HSTACK(
         TEXTBEFORE(
             _Score,
              "-"
         ),
          TEXTAFTER(
              _Score,
               "-"
          )
     ),
    
 _GameWinner,
     _Goals > BYROW(
         _Goals,
          MIN
     ),
    
 _Teams,
     UNIQUE(
         TOCOL(
             _Matches
         )
     ),
    
 _Winners,
     FILTER(
         TOROW(
             _Matches
         ),
          TOROW(
              _GameWinner
          )
     ),
    
 _Wins,
     BYROW(--(_Teams = _Winners),
     SUM),
    
 SORT(
     HSTACK(
         _Teams,
          _Wins
     ),
      2,
      -1
 )
)
Excel solution 14 for Count Team Wins, proposed by Oscar Javier Rosero Jiménez:
=LET(
_t1,
    A2:A11,
    _t2,
    B2:B11,
    _r,
    C2:C11,
    
_u,
    UNIQUE(
        VSTACK(
            _t1,
            _t2
        )
    ),
    
_res,
    --TEXTSPLIT(
        TEXTJOIN(
            ",",
            0,
            _r
        ),
        "-",
        ","
    ),
    
a,
    0+(CHOOSECOLS(
        _res,
        1
    )>CHOOSECOLS(
        _res,
        2
    )),
    
b,
    0+(CHOOSECOLS(
        _res,
        1
    )b,
        a,
        a
Excel solution 15 for Count Team Wins, proposed by Jardiel Euflázio:
=LET(
    a,
    A2:A11,
    b,
    B2:B11,
    c,
    C2:C11,
    d,
    TEXTBEFORE(
        c,
        "-"
    ),
    e,
    TEXTAFTER(
        c,
        "-"
    ),
    f,
    IF(
        d+0>e+0,
        a,
        IF(
            e+0>d+0,
            b
        )
    ),
    g,
    UNIQUE(
        TOCOL(
            HSTACK(
                a,
                b
            )
        )
    ),
    SORT(
        HSTACK(
            g,
            BYROW(
                g,
                LAMBDA(
                    g,
                    IFERROR(
                        ROWS(
                            FILTER(
                                f,
                                f=g
                            )
                        ),
                        0
                    )
                    
                )
            )
        ),
        2,
        -1
    )
)
Excel solution 16 for Count Team Wins, proposed by Sarun Chimamphant:
=LET(
    ab,
    TOCOL(
        A2:B11,
        ,
        1
    ),
    c,
    C2:C11,
    l,
    --TEXTBEFORE(
        c,
        "-"
    ),
    r,
    --TEXTAFTER(
        c,
        "-"
    ),
    wl,
    TOCOL(
        --HSTACK(
            l>r,
            r>l
        ),
        ,
        1
    ),
    d,
    UNIQUE(
        ab
    ),
    e,
    BYROW(
        d,
        LAMBDA(
            r,
            SUM(
                IF(
                    ab=r,
                    wl,
                    0
                )
            )
        )
    ),
    SORT(
        HSTACK(
            d,
            e
        ),
        2,
        -1
    )
)
Excel solution 17 for Count Team Wins, proposed by Miguel Angel Franco García:
=LET(
    a;
    ABS(
        EXTRAE(
            C2:C11;
            1;
            ENCONTRAR(
                "-";
                C2:C11
            )-1
        )
    );
    b;
    ABS(
        DERECHA(
            C2:C11;
            LARGO(
                C2:C11
            )-ENCONTRAR(
                "-";
                C2:C11
            )
        )
    );
    resul;
    ORDENAR(
        ENCOL(
            APILARV(
                SI(
                    a-b>0;
                    A2:A11;
                    NOD()
                );
                SI(
                    a-b<0;
                    B2:B11;
                    NOD()
                )
            );
            3
        )
    );
    solos;
    UNICOS(
        A2:A11
    );
    resul2;
    APILARH(
        resul;
        FRECUENCIA(
            COINCIDIR(
                resul;
                resul;
                0
            );
            COINCIDIR(
                resul;
                resul;
                0
            )
        )
    );
    FILTRAR(
        SI.ERROR(
            resul2;
            ""
        );
        INDICE(
            SI.ERROR(
                resul2;
                ""
            );
            ;
            2
        )<>0
    )
)

Solving the challenge of Count Team Wins with Python in Excel

Python in Excel solution 1 for Count Team Wins, proposed by Alejandro Campos:
df = xl("A1:C11", headers=True)
team_wins = {team: 0 for team in set(df['Team 1']).union(df['Team 2'])}
for _, row in df.iterrows():
 score_team1, score_team2 = map(int, row['Result'].split('-'))
 winner = row['Team 1'] if score_team1 > score_team2 else row['Team 2'] if score_team2 > score_team1 else None
 if winner: team_wins[winner] += 1
result_df = pd.DataFrame(list(team_wins.items()), columns=['Team', 'Wins']).sort_values(by='Wins', ascending=False).reset_index(drop=True)
                    
                  

Solving the challenge of Count Team Wins with DAX

DAX solution 1 for Count Team Wins, proposed by Zoran Milokanović:
DEFINE
VAR T = ADDCOLUMNS(Input, 
 "G1", VAR R = Input[Result] RETURN CONVERT(LEFT(R, FIND("-", R, 1, 0) - 1), INTEGER),
 "G2", VAR R = Input[Result] RETURN CONVERT(MID(R, FIND("-", R, 1, 0) + 1, LEN(R)), INTEGER)
 )
EVALUATE
GROUPBY(
 UNION(
 SELECTCOLUMNS(T, "Team", Input[Team 1], "N", IF([G1] > [G2], 1, 0)),
 SELECTCOLUMNS(T, "Team", Input[Team 2], "N", IF([G2] > [G1], 1, 0))
 ),
 [Team],
 "No. of Wins", 
 SUMX(CURRENTGROUP(), [N])
)
ORDER BY
 [No. of Wins] DESC
 
 
                    
                  

&&

Leave a Reply