I have a table with names of players like this:
| Player |
|---|
| John |
| Eric |
| Valerie |
| Carmen |
And another table with a list of played matches (match number, match date and the list of players that played in the match). Something like this:
| Match | Date | Player1 | Player2 | Player3 |
|---|---|---|---|---|
| 1 | 15/11/2022 | John | Eric | |
| 2 | 15/11/2022 | John | Eric | |
| 3 | 15/11/2022 | John | Eric | |
| 4 | 16/11/2022 | John | Valerie | Carmen |
| 5 | 16/11/2022 | John | Carmen | |
| 6 | 17/11/2022 | John | Carmen |
Now with these information I would like to add a column to the player table showing the number of different days each player has played. Something like this:
| Player | Days (attendance) |
|---|---|
| John | 3 |
| Eric | 1 |
| Valerie | 1 |
| Carmen | 2 |
How can I do this?
My idea was:
- foreach player, select all records from the matches tables containing the player. For example with player Carmen I will select these:
| Match | Date | Player1 | Player2 | Player3 |
|---|---|---|---|---|
| 4 | 16/11/2022 | John | Valerie | Carmen |
| 5 | 16/11/2022 | John | Carmen | |
| 6 | 17/11/2022 | John | Carmen |
- from these records consider only the column date and and the column current player
| Date | Player |
|---|---|
| 16/11/2022 | Carmen |
| 16/11/2022 | Carmen |
| 17/11/2022 | Carmen |
- remove duplicates
| Date | Player |
|---|---|
| 16/11/2022 | Carmen |
| 17/11/2022 | Carmen |
- And finally count the number of elements
This was my idea but I'm a novice and I have not been able to implement it. How can I do this (or something similar)? Thanks!!
CodePudding user response:
try:
=INDEX(QUERY(SPLIT(UNIQUE(FLATTEN(IF(C2:E="",,B2:B&""&C2:E))), ""),
"select Col2,count(Col2) where Col2 is not null group by Col2 label count(Col2)''"))
update:
=INDEX(IFNA(VLOOKUP(<column of names here>,
QUERY(SPLIT(UNIQUE(FLATTEN(IF(C2:E="",,B2:B&""&C2:E))), ""),
"select Col2,count(Col2) where Col2 is not null group by Col2 label count(Col2)''"), 2, )))
CodePudding user response:
You can try this:
players['Days_Attendance'] = [list(matches['Player 1']).count(e)
list(matches['Player 2']).count(e) list(matches['Player 2']).count(e) for e in
players['Player']]
I do not know if you have a lot of columns "Planer n". If that is the case, you could think in create a function with the pourpouse of have a clean script.
Or, more complex for 12 players:
players['Days_Attendance'] = [sum(list(matches['Player ' str(n)]).count(e) for
n in range(1,12)) for e in players['Player']]
Regards,

