我是學習 SQL 的一年級學生。我想知道如何選擇 data_jogo (date_game) 值,某個玩家在比賽中達到了他的最高分。該玩家可以作為玩家 1 (id_jogador1) 或玩家 2 (id_jogador2) 出現。表名是“partidas”,翻譯過來就是比賽,“pontuacao_jog1”表示玩家1的得分,“pontuacao_jog2”對于玩家2來說也是一樣的。
在此處輸入影像描述
我試過這種方式,但不起作用(#1111 - Uso inválido de fun??o de agrupamento (GROUP)):
SELECT partidas.data_jogo AS Date
FROM partidas
WHERE (partidas.id_jogador1 = 'CR7' OR partidas.id_jogador2 = 'CR7')
AND GREATEST (max (partidas.pontuacao_jog1), max (partidas.pontuacao_jog2));
有人可以幫忙嗎?
謝謝你,若昂
uj5u.com熱心網友回復:
您可以使用UNION ALL簡單的方法獲取玩家的分數。然后您可以對分數進行排序并用于LIMIT獲取最高分數的行:
WITH scores AS
(
SELECT pontuacao_jog1 AS score, data_jogo
FROM partidas
WHERE id_jogador1 = 'CR7'
UNION ALL
SELECT pontuacao_jog2 AS score, data_jogo
FROM partidas
WHERE id_jogador2 = 'CR7'
)
SELECT *
FROM scores
ORDER BY score DESC
LIMIT 1;
唯一的問題:如果有兩天的最高分相同,您只會顯示其中任意選擇的一天。如果你想同時顯示:
WITH scores AS ( <same as above> )
SELECT *
FROM scores
WHERE score = (SELECT MAX(score) FROM scores);
這是撰寫 CTE(又名WITH子句)的另一種方法:
WITH scores AS
(
SELECT
CASE WHEN id_jogador1 = 'CR7'
THEN pontuacao_jog1
ELSE pontuacao_jog2
END AS score,
data_jogo
FROM partidas
WHERE (id_jogador1 = 'CR7' OR id_jogador2 = 'CR7')
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/496297.html
