Как мне расплавить таблицу SQL? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть следующая таблица SQL, давайте назовем ее Team_score, которая показывает команды из 2 игроков за игру и их счет. Мне нужно наблюдать за счетом каждого игрока каждый раз, когда он появляется в команде как игрок 1 игрока 2. Я думаю, что это похоже на таяние.

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 лучших игроков с наибольшим средним счетом.

Например, «Пэт Магроин» появился в 2 командах с 95 и 63 баллами и средним баллом 79

Поэтому мне нужно отобразить таблицу «player_score», как показано ниже, а затем агрегировать по среднему баллу. КАК ПОЛУЧИТЬ ТАБЛИЦУ 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, я смогу выполнить запрос (показанный ниже), чтобы получить таблицу 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

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018
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);
0 голосов
/ 11 сентября 2018

Вы можете использовать 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;
...