如何查询SQL以获得这样的结果

时间:2018-06-13 22:43:12

标签: sql oracle-sqldeveloper

game
-----
id
start_time
player_p_id

player
-------
p_id
username

answer
------
id
correct
text

game_answer
-----------
game_id
answers_id

大家好,我怎样才能创建一个SQL查询来选择(game.id,player.name,[score])?

我希望得到一个结果游戏的id,玩家的名字和分数。 分数是正确答案的总和。

我尝试了这个查询,但它不起作用

SELECT g.id, p.username, g.start_time, sum(a.correct)
from GAME g
INNER JOIN PLAYER p ON g.player_p_id = p.p_id
INNER JOIN GAME_ANSWER ga ON ga.GAME_ID = g.ID
INNER JOIN ANSWER a ON a.id = ga.ANSWERS_ID
ORDER BY g.id;

注意:answer.correct是o或1

1 个答案:

答案 0 :(得分:0)

您的查询存在两个明显的语法问题。

它使用与您在表定义中提供的名称不同的名称引用各种列。例如,查询引用了a.correct,但您显示answers中的列被称为“isCorrect。您可能收到错误消息,指出列不存在。为所有列使用正确的名称。

(好像你现在已经更新了表定义,以便列名匹配。所以上面的内容可能不是问题。)

查询中没有GROUP BY子句。 SUM是一个组函数。如果在选择列表中同时包含未分组值(g.id, p.username, g.start_time)和分组值,则需要GROUP BY子句。通常,您只需在选择列表中包含未被组函数包围的每一列。在这种情况下,您似乎想要GROUP BY g.id, p.username, g.start_time。这应该在ORDER BY子句之前。

您现在已经澄清isCorrect包含0或1,因此对于其他更正,SUM函数应该提供您想要的结果。