如何选择具有相同外键的两个列的平均值

时间:2021-01-26 09:51:20

标签: mysql sql

我有一个比赛的比赛表。

这里是mysql表:

<头>
id 玩家1 player1_score player1_rating 玩家2 player2_score player2_rating tourney_id 回合
1 1 9 1.05 2 3 5.34 5 1
2 3 4 5.21 4 9 3.34 5 1
3 5 9 3.52 6 2 5.24 5 1
4 1 9 6.23 3 0 4.74 5 2
5 2 8 9.43 4 9 1.23 5 2
6 3 9 3.41 5 7 6.23 5 2
7 1 9 5.22 4 2 2.43 5 3
8 2 3 4.21 3 9 5.22 5 3
9 5 1 7.31 6 9 3.43 5 3

如何获得特定锦标赛中每位球员的平均球员评分? 请注意,有两列包含玩家 ID (player1, player2)

2 个答案:

答案 0 :(得分:0)

根据您的要求(即使您没有给我们您的预期结果),我认为您的代码应该是这样的:

 SELECT (SELECT SUM(player1_rating) / COUNT(DISTINCT player1)
            FROM your_table GROUP BY player1) as avg_player1, 
           (SELECT SUM(player2_rating) / COUNT(DISTINCT player2) FROM your_table 
           GROUP BY player2) as avg_player2
    FROM your_table
       

答案 1 :(得分:-1)

我将查询修改为:

SELECT player_id
    , tourney_id
    , avg_player_rating = SUM(player_rating) / SUM(cnt)
FROM (

    SELECT player_id = player1
        , tourney_id
        , player_rating = SUM(player1_rating)
        , cnt = COUNT(*)
    FROM tournament
    GROUP BY tourney_id, player1

    UNION ALL

    SELECT player_id = player2
        , tourney_id
        , player_rating = SUM(player2_rating)
        , cnt = COUNT(*)
    FROM tournament
    GROUP BY tourney_id, player2

) AS a
GROUP BY player_id, tourney_id

这将给出结果:

player_id   tourney_id   avg_player_rating
----------  ----------   --------------------
 1           5            4.1666
 2           5            6.3266
 3           5            4.6450
 4           5            2.3333
 5           5            5.6866
 6           5            4.3350

我希望这是您正在寻找的结果。