List the qualifying player from each group on the basis of 1. Highest average in that group 2. A player should have played a minimum of 10 matches
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 197
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Top Player by Group Average with Power Query
Power Query solution 1 for Top Player by Group Average, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Group = Table.Group(
Source,
"Group",
{
"Player",
each Table.Sort(
Table.AddColumn(_, "P", each if [Matches] > 9 then - [Total Points] / [Matches] else null),
"P"
)[Player]{0}
}
)
in
Group
Power Query solution 2 for Top Player by Group Average, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
Solution = Table.Group(
Table.AddColumn(
Table.SelectRows(Source, each [Matches] >= 10),
"Avg",
each [Total Points] / [Matches]
),
{"Group"},
{{"Player", each List.Last(Table.Sort(_, "Avg")[Player])}}
)
in
Solution
Power Query solution 3 for Top Player by Group Average, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
Average = Table.AddColumn(Source, "Avg", each [Total Points] / [Matches]),
Return = Table.Group(
Average,
"Group",
{"Player", each Table.Max(Table.Sort(_, {"Avg", 1}), {(f) => f[Matches] >= 10, "Avg"})[Player]}
)
in
Return
Power Query solution 4 for Top Player by Group Average, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Table.SelectRows(Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], each [Matches] > 9),
Sol = Table.Group(
Source,
{"Group"},
{
{
"Player",
each
let
a = Table.AddColumn(_, "Tot", each [Total Points] / [Matches]),
b = Table.Max(a, "Tot")[Player]
in
b
}
}
)
in
Sol
Power Query solution 5 for Top Player by Group Average, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
gp = Table.Group(
Fonte,
{"Group"},
{
{
"Contagem",
each [
a = Table.SelectRows(_, each [Matches] > 9),
b = List.Max(Table.AddColumn(a, "media", each [Total Points] / [Matches])[media]),
c = Table.SelectRows(a, each ([Total Points] / [Matches]) = b)
][c]
}
}
),
res = Table.ExpandTableColumn(gp, "Contagem", {"Player"})
in
res
Power Query solution 6 for Top Player by Group Average, proposed by Brian Julius:
let
Source = Table.SelectRows(
Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
each [Matches] >= 10
),
AddAvgPts = Table.AddColumn(Source, "AvgPts", each [Total Points] / [Matches]),
Group = Table.Group(
AddAvgPts,
{"Group"},
{
{
"All",
each _,
type table [
Group = text,
Player = text,
Matches = number,
Total Points = number,
AvgPts = number
]
},
{"MaxAvgPts", each List.Max([AvgPts]), type number}
}
),
Expand = Table.ExpandTableColumn(Group, "All", {"Player", "AvgPts"}, {"Player", "AvgPts"}),
FilterNClean = Table.SelectColumns(
Table.SelectRows(Expand, each [AvgPts] = [MaxAvgPts]),
{"Group", "Player"}
)
in
FilterNClean
Power Query solution 7 for Top Player by Group Average, proposed by Guillermo Arroyo:
let
Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content],
a = Table.AddColumn(Origen, "Averege", each [Total Points] / [Matches]),
b = Table.SelectRows(a, each [Matches] > 9),
c = Table.Group(b, {"Group"}, {{"Aux", each _, type table}}),
d = Table.AddColumn(c, "Player", each Record.Field(Table.Max([Aux], "Averege"), "Player")),
e = Table.RemoveColumns(d, {"Aux"})
in
e
Power Query solution 8 for Top Player by Group Average, proposed by Surendra Reddy:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
FilteredRows = Table.SelectRows(Source, each [Matches] >= 10),
AddedCustom = Table.AddColumn(FilteredRows, "Points per Match", each [Total Points] / [Matches]),
Result = Table.Group(
AddedCustom,
{"Group"},
{
{
"Player",
each
let
a = Table.Sort(_, {"Points per Match", Order.Descending})
in
a{0}[Player]
}
}
)
in
Result
Power Query solution 9 for Top Player by Group Average, proposed by Surendra Reddy:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
FilteredRows = Table.SelectRows(Source, each [Matches] >= 10),
AddedCustom = Table.AddColumn(
FilteredRows,
"Points per Match",
each [Total Points] / [Matches],
type number
),
SortedRows = Table.Buffer(
Table.Sort(AddedCustom, {{"Group", Order.Ascending}, {"Points per Match", Order.Descending}})
),
GroupedRows = Table.Group(SortedRows, {"Group"}, {{"MaxPlayer", each _{0}[Player]}})
in
GroupedRows
Power Query solution 10 for Top Player by Group Average, proposed by Alejandra Horvath CPA, CGA:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Grouped = Table.Group(
Source,
{"Group"},
{
{
"Count",
each
let
a = Table.AddColumn(
Table.SelectRows(_, each [Matches] > 9),
"Average",
each [Total Points] / [Matches]
)
in
Table.Sort(a, {{"Average", Order.Descending}})[Player]{0}
}
}
)
in
Grouped
Solving the challenge of Top Player by Group Average with Excel
Excel solution 1 for Top Player by Group Average, proposed by Bo Rydobon 🇹🇭:
=LET(g,A2:A13,u,UNIQUE(g),m,C2:C13,HSTACK(u,MAP(u,LAMBDA(a,XLOOKUP(99,D2:D13/m/(m>9)/(g=a),B2:B13,,-1)))))
Excel solution 2 for Top Player by Group Average, proposed by Bo Rydobon 🇹🇭:
=LET(g,A2:A13,u,UNIQUE(g),m,C2:C13,HSTACK(u,XLOOKUP(u,g&m/D2:D13/(m>9),B2:B13,,1)))
Excel solution 3 for Top Player by Group Average, proposed by Rick Rothstein:
=LET(a,A2:A13,c,C2:C13,d,D2:D13,u,UNIQUE(a),HSTACK(u,XLOOKUP(MAP(u,LAMBDA(u,MAX(FILTER(d/c,(a=u)*(c>9))))),d/c,B2:B13)))
Excel solution 4 for Top Player by Group Average, proposed by John V.:
=LET(g,A2:A13,m,C2:C13,a,D2:D13/m,FILTER(A2:B13,a=MAP(g,LAMBDA(x,MAX(a*(m>9)*(g=x))))))
Excel solution 5 for Top Player by Group Average, proposed by John V.:
=LET(u,UNIQUE(A2:A13),m,C2:C13,HSTACK(u,VLOOKUP(u,SORTBY(A2:B13,-(m>9)*D2:D13/m),2,)))
Excel solution 6 for Top Player by Group Average, proposed by محمد حلمي:
=LET(e,A2:A13,c,C2:C13,l,UNIQUE(e),HSTACK(l,MAP(l,LAMBDA(a,TAKE(SORT(FILTER(HSTACK(B2:D13,D2:D13/c),(e=a)*(c>10)),4),-1,1)))))
Excel solution 7 for Top Player by Group Average, proposed by محمد حلمي:
=LET(c,C2:C13,r,SORT(SORTBY(A2:D13,c>9,-1,D2:D13/c,-1)),l,UNIQUE(A2:A13),HSTACK(l,XLOOKUP(l,TAKE(r,,1),INDEX(r,,2))))
Excel solution 8 for Top Player by Group Average, proposed by محمد حلمي:
=LET(c,C2:C13,r,SORTBY(A2:D13,c>9,-1,D2:D13/c,-1),l,UNIQUE(A2:A13),HSTACK(l,XLOOKUP(l,TAKE(r,,1),INDEX(r,,2))))
Excel solution 9 for Top Player by Group Average, proposed by محمد حلمي:
=LET(e,A2:A13,c,C2:C13,l,UNIQUE(e),HSTACK(l,MAP(l,LAMBDA(a,LET(v,FILTER(HSTACK(B2:D13,D2:D13/c),(e=a)*(c>10)),r,TAKE(v,,-1),XLOOKUP(MAX(r),r,TAKE(v,,1)))))))
Excel solution 10 for Top Player by Group Average, proposed by Kris Jaganah:
=LET(a,A2:A13,b,B2:B13,c,C2:C13,d,D2:D13/c,e,UNIQUE(a),HSTACK(e,XLOOKUP(MAP(e,LAMBDA(x,MAX((a=x)*d*(c>9)))),d,b)))
Excel solution 11 for Top Player by Group Average, proposed by Julian Poeltl:
=LET(T,A2:D13,TT,HSTACK(TAKE(T,,3),TAKE(T,,-1)/CHOOSECOLS(T,3)),S,SORT(TT,4,-1),U,UNIQUE(TAKE(SORT(S,,1),,1)),HSTACK(U,MAP(U,LAMBDA(A,TAKE(FILTER(CHOOSECOLS(S,2),(TAKE(S,,1)=A)*(CHOOSECOLS(S,3)>9)),1)))))
Excel solution 12 for Top Player by Group Average, proposed by Timothée BLIOT:
=LET(A,A2:A13,B,B2:B13,D,C2:C13,E,D2:D13,HSTACK(UNIQUE(A),MAP(UNIQUE(A),LAMBDA(x,FILTER(B,E/D=(MAX(FILTER((E/D),(A=x)*(D>10)))))))))
Excel solution 13 for Top Player by Group Average, proposed by Hussein SATOUR:
=LET(m, C2:C13, t, T2:T13, g, A2:A13, c, t/IF(m<10, 100,m), HSTACK(UNIQUE(g), MAP(UNIQUE(g), LAMBDA(x, INDEX(SORT(FILTER(HSTACK(A2:B13,c), g=x),3,-1),1,2)))))
Excel solution 14 for Top Player by Group Average, proposed by Oscar Mendez Roca Farell:
=LET(_a, A2:A13,_c, C2:C13,_u, UNIQUE(_a),_m, (D2:D13/_c)*(_c>9)*(_a=TOROW(_u)), HSTACK(_u, TOCOL(REPT(B2:B13, 1/(_m=BYCOL(_m,LAMBDA(c,MAX(c))))), 3)))
Excel solution 15 for Top Player by Group Average, proposed by Duy Tùng:
=LET(a,SORTBY(A1:D13,IFERROR(D1:D13/C1:C13,0)),GROUPBY(INDEX(a,,1),INDEX(a,,2),LAMBDA(x,@TAKE(x,-1)),3,0,,INDEX(a,,3)>9))
Excel solution 16 for Top Player by Group Average, proposed by Sunny Baggu:
=LET(
_tbl, SORT(HSTACK(A2:D13, D2:D13 / C2:C13), {1, 5}, {1, -1}),
Sortbl, FILTER(_tbl, CHOOSECOLS(_tbl, 3) >= 10),
DROP(
REDUCE(
"",
UNIQUE(TAKE(_tbl, , 1)),
LAMBDA(a, v,
VSTACK(
a,
LET(
_ftbl, FILTER(Sortbl, CHOOSECOLS(Sortbl, 1) = v),
FILTER(_ftbl, TAKE(_ftbl, , -1) = LARGE(TAKE(_ftbl, , -1), 1))
)
)
)
),
1,
-3
)
)
Excel solution 17 for Top Player by Group Average, proposed by Md. Zohurul Islam:
=LET(u,A2:D13,v,UNIQUE(TAKE(u,,1)),I,INDEX,cc,CHOOSECOLS,
a,SORT(FILTER(u,cc(u,3)>=10),1),
b,I(a,,4)/I(a,,3),
d,MAP(TOROW(v),LAMBDA(x,MAX(FILTER(b,TAKE(a,,1)=x)))),
e,TOCOL(BYCOL(IF(b=d,I(a,,2),""),CONCAT)),
VSTACK(A1:B1,HSTACK(v,e)))
Excel solution 18 for Top Player by Group Average, proposed by Pieter de B.:
=LET(
a,
A2:D13,
b,
FILTER(
a,
INDEX(
a,
,
3
)>9
),
c,
SORTBY(
TAKE(
b,
,
2
),
INDEX(
b,
,
4
)/INDEX(
b,
,
3
),
-1
),
g,
TAKE(
c,
,
1
),
CHOOSEROWS(
c,
XMATCH(
UNIQUE(
g
),
g
)
)
)
Excel solution 19 for Top Player by Group Average, proposed by Dhaval Patel:
=INDEX(UNIQUE($A$2:$A$13), ROWS($G$3:G3))
Formula for cell H3
=INDEX($B$2:$B$13, MATCH(AGGREGATE(14, 6, $D$2:$D$13/$C$2:$C$13/(( $A$2:$A$13=G3)*($C$2:$C$13>=10)), 1), $D$2:$D$13/$C$2:$C$13, 0))
Excel solution 20 for Top Player by Group Average, proposed by Charles Roldan:
=LET(_Keep, LAMBDA(x, FILTER(x, LEN(x))),
_IsColMax, LAMBDA(x, x = BYCOL(x, LAMBDA(y, MAX(y)))),
_MakeCols, LAMBDA(x, x = TOROW(UNIQUE(x))), _Keep(TOCOL(REPT(B2:B13, _IsColMax(D2:D13/C2:C13 * (C2:C13 >= 10) * _MakeCols(A2:A13))), , 1)))
Excel solution 21 for Top Player by Group Average, proposed by JvdV -:
=LET(a,C2:C13,b,SORT(FILTER(HSTACK(A2:B13,D2:D13/a),a>9),3,-1),c,UNIQUE(TAKE(b,,1)),HSTACK(c,VLOOKUP(c,b,2,0)))
Excel solution 22 for Top Player by Group Average, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(
q;
D2:D13/C2:C13;
w;
UNIQUE(
A2:A13
);
HSTACK(
w;
XLOOKUP(
MAP(
w;
LAMBDA(
a;
LARGE(
IFERROR(
IF(
C2:C13>=10;
MAP(
A2:A13;
q;
LAMBDA(
x;
& y;
XLOOKUP(
a;
x;
y
)
)
);
""
);
""
);
1
)
)
);
q;
B2:B13
)
)
)
Excel solution 23 for Top Player by Group Average, proposed by Julien Lacaze:
=LET(datas,FILTER(A2:D13,C2:C13>=10),scores,BYROW(datas,LAMBDA(a,CHOOSECOLS(a,4)/CHOOSECOLS(a,3))),groups,UNIQUE(CHOOSECOLS(datas,1)),
sorted,SORT(HSTACK(DROP(datas,0,-2),scores),3,-1),
HSTACK(groups,XLOOKUP(UNIQUE(CHOOSECOLS(datas,1)),CHOOSECOLS(sorted,1),CHOOSECOLS(sorted,2))))
Excel solution 24 for Top Player by Group Average, proposed by Guillermo Arroyo:
=LET(m,A2:D13,d,HSTACK(m,INDEX(m,,4)/INDEX(m,,3)),b,SORT(UNIQUE(INDEX(d,,1))),HSTACK(b,MAP(b,LAMBDA(a,@CHOOSECOLS(SORT(FILTER(d,(INDEX(d,,1)=a)*(INDEX(d,,3)>9),""),5,-1),2)))))
Excel solution 25 for Top Player by Group Average, proposed by Daniel Garzia:
=LET(s,SORT(FILTER(HSTACK(A2:D13,D2:D13/C2:C13),C2:C13>9),{1,5},{1,-1}),g,TAKE(s,,1),u,UNIQUE(g),
VSTACK(A1:B1,HSTACK(u,XLOOKUP(u,g,INDEX(s,,2)))))
Excel solution 26 for Top Player by Group Average, proposed by Henriette Hamer:
=x)*($K$2:$K$13=MAX(FILTER($K$2:$K$13;($A$2:$A$13=x)*($L$2:$L$13=TRUE)))))))
Excel solution 27 for Top Player by Group Average, proposed by Miguel Angel Franco García:
=LET(a;UNICOS(A2:A13);b;FILTRAR(B2:D13;(C2:C13>=10)*(A2:A13=INDICE(a;1)));c;FILTRAR(B2:D13;(C2:C13>=10)*(A2:A13=INDICE(a;2)));d;FILTRAR(B2:D13;(C2:C13>=10)*(A2:A13=INDICE(a;3)));e;APILARH(a;APILARV(BUSCARX(PROMEDIO(INDICE(b;;3));INDICE(b;;3);INDICE(b;;1);;1);BUSCARX(PROMEDIO(INDICE(c;;3));INDICE(c;;3);INDICE(c;;1);;1);BUSCARX(PROMEDIO(INDICE(d;;3));INDICE(d;;3);INDICE(d;;1);;1)));e)
Excel solution 28 for Top Player by Group Average, proposed by Hussain Ali Nasser:
=LET(
_table,A2:D13,
_averages,D2:D13/C2:C13,
_averagetable,HSTACK(_table,_averages),
_filteredtable,FILTER(_averagetable,CHOOSECOLS(_averagetable,3)>10),
_sortedtable,SORT(_filteredtable,{1,5},{1,-1}),
_groups,UNIQUE(A2:A13),
_lookup,XLOOKUP(_groups,TAKE(_sortedtable,,1),INDEX(_sortedtable,,2)),
HSTACK(_groups,_lookup)
)
Excel solution 29 for Top Player by Group Average, proposed by Stevenson Yu:
=LET(A, A2:D13,
B, INDEX(A,0,3),
C, INDEX(A,0,4)/B*(B>9),
D, INDEX(A,0,1),
E, C=MAX(IF(D="A",C,0)),
F, C=MAX(IF(D="B",C,0)),
G, C=MAX(IF(D="C",C,0)),
H, TAKE(A,,2),
I, VSTACK(FILTER(H,E),FILTER(H,F),FILTER(H,G)),
I)
Excel solution 30 for Top Player by Group Average, proposed by Enrico Giorgi:
=LET(mean,$D$2:$D$13/$C$2:$C$13,x,MAX(IF($A$2:$A$13=G3,IF($C$2:$C$13>=10,mean))),INDEX($B$2:$B$13,MATCH(G3&x,$A$2:$A$13&mean,0)))
ITALIAN VERSION
=LET(mean;$D$2:$D$13/$C$2:$C$13;x;MAX(SE($A$2:$A$13=G3;SE($C$2:$C$13>=10;mean)));INDICE($B$2:$B$13;CONFRONTA(G3&x;$A$2:$A$13&mean;0)))
Excel solution 31 for Top Player by Group Average, proposed by Surendra Reddy:
=LET(a,A2:A13,b,C2:C13,d,D2:D13,e,UNIQUE(a),HSTACK(e,XLOOKUP(MAP(e,LAMBDA(x,MAX(FILTER(d/b,(b>=10)*(a=x))))),d/b,B2:B13)))
Excel solution 32 for Top Player by Group Average, proposed by Surendra Reddy:
=LET(a,A2:A13,b,C2:C13,c,D2:D13,d,UNIQUE(a),e,MAP(d,LAMBDA(x,MAX(FILTER(c/b,(a=x)*(b>=10))))),HSTACK(d,MAP(e,LAMBDA(y,FILTER(B2:B13,c/b=y)))))
Excel solution 33 for Top Player by Group Average, proposed by Surendra Reddy:
=LET(a,FILTER(A2:D13,C2:C13>=10),b,UNIQUE(A2:A13),d,INDEX(a,,4)/INDEX(a,,3),e,INDEX(a,,2),f,INDEX(a,,1),HSTACK(b,MAP(b,LAMBDA(x,FILTER(e,(d)=MAX(FILTER(d,(f=x))))))))
Excel solution 34 for Top Player by Group Average, proposed by Surendra Reddy:
=LET(a,FILTER(A2:D13,C2:C13>=10),b,UNIQUE(A2:A13),d,CHOOSECOLS(a,4)/CHOOSECOLS(a,3),e,CHOOSECOLS(a,2),f,CHOOSECOLS(a,1),HSTACK(b,MAP(b,LAMBDA(x,FILTER(e,(d)=MAX(FILTER(d,(f=x))))))))
&&
