我如何融化 SQL table?

How do I MELT a SQL table?

我有以下 SQL table,我们称它为 teams_score,它显示了 2 名球员组成的球队的一场比赛及其得分。我需要观察每个球员每次作为 Player1 或 Player2 出现在团队中时的得分。我认为这就像融化一样。

Player1,         Player2,          TeamScore
"Johnny Onspot", "Pat Magroin",     95
"Pepe Roni",     "Cole Kutz",       78
"Ben Dover",     "Ibin Yerkinoff",  76
"Johnny Onspot", "Frumunda Mabalz", 69
"Sal Lami",      "Cole Kutz",       65
"Pat Magroin",   "Frumunda Mabalz", 63

我想找出平均得分最高的前 3 名玩家。

例如,"Pat Magroin" 出现在 2 支得分分别为 95 分和 63 分且平均得分为 79 分的球队中

所以我需要如下所示显示table "player_score" 然后按平均分数汇总。我如何获得如下所示的 TABLE player_score?

Player,            Score
"Ben Dover",       76
"Cole Kutz",       78
"Cole Kutz",       65
"Frumunda Mabalz", 69
"Frumunda Mabalz", 63
"Ibin Yerkinoff",  76
"Johnny Onspot",   95
"Johnny Onspot",   69
"Pat Magroin",     95
"Pat Magroin",     63
"Pepe Roni",       78
"Sal Lami",        65

一旦我有了 player_score,我应该能够 运行 查询(如下所示)以获取 table result_table,如下所示。

SELECT Player, AVG(Score) AS Avg_Score FROM player_score
GROUP BY Player
ORDER BY Avg_Score DESC
LIMIT 3;

Player,            Avg_Score
"Johnny Onspot",   82
"Pat Magroin",     79
"Pepe Roni",       78

你可以使用 UNION ALL:

SELECT Player, AVG(score) AS avg_score
FROM(SELECT Player1 AS player, Score FROM player_score
     UNION ALL SELECT Player2, Score FROM player_score) sub
GROUP BY Player
ORDER BY avg_Score DESC
LIMIT 3;
CREATE TABLE player_score AS SELECT Player1 AS Player, TeamScore AS Score FROM(
SELECT Player1, TeamScore
FROM teams_score
UNION ALL
SELECT Player2, TeamScore
FROM teams_score);

-- Delete duplicate rows where player and score are the same in both rows
DELETE FROM player_score WHERE rowid NOT IN 
(SELECT min(rowid) FROM player_score GROUP BY Player, Score);
SELECT *
FROM (
    SELECT Player1 AS Player, TeamScore as Score
    FROM teams_score

    UNION ALL

    SELECT Player2 AS Player, TeamScore as Score
    FROM teams_score
)

应该给

Player                  Score
"Johnny Onspot",        95
"Pat Magroin",          95
"Pepe Roni",            78
"Cole Kutz",            78
"Ben Dover",            76
"Ibin Yerkinoff",       76
"Johnny Onspot",        69
"Frumunda Mabalz",      69
"Sal Lami",             65
"Cole Kutz",            65
"Pat Magroin",          63
"Frumunda Mabalz",      63

请注意使用 UNION ALL(而不是仅使用 UNION)来确保包含重复行。这样可以正确计算平均值。

从这里开始,您应该可以做您想做的事

WITH
    ...above code
AS player_score
SELECT Player, AVG(Score) AS Avg_Score
FROM player_score
GROUP BY Player
ORDER BY Avg_Score DESC
LIMIT 3;