You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于正确答题数对玩家排名:仅用QuizInfo与PlayerAnswers表可行吗?

基于两张表实现玩家答题排名:可行性与实现方案

可行性结论

完全可行。两张表通过QuestionID字段关联,能够将玩家提交的答案(PlayerAnswers.PlayerAnswerID)与对应题目的正确答案(QuizInfo.CorrectAnswerID)做匹配,统计每个玩家的正确答题数量,进而完成排名,仅用这两张表就能满足需求。

具体实现(SQL示例)

第一步:统计每个玩家的正确答题数

先关联两张表,筛选出玩家答案与正确答案一致的记录,再按玩家ID分组统计正确题数:

SELECT 
    pa.PlayerID,
    COUNT(qi.QuestionID) AS CorrectCount
FROM PlayerAnswers pa
JOIN QuizInfo qi ON pa.QuestionID = qi.QuestionID
WHERE pa.PlayerAnswerID = qi.CorrectAnswerID
GROUP BY pa.PlayerID

注:玩家未回答的问题不会出现在PlayerAnswers中,所以这部分不会被统计,符合“仅计算已提交且正确的答案”的逻辑。

第二步:为玩家生成排名

根据正确题数排序后,用SQL的排名函数生成名次。常用两种排名逻辑:

  • 普通排名:并列名次会占用后续名次(比如两个第1名,下一个是第3名),用RANK()函数
  • 密集排名:并列名次不占用后续名次(比如两个第1名,下一个是第2名),用DENSE_RANK()函数

以下是完整的密集排名示例SQL:

SELECT 
    PlayerID,
    CorrectCount,
    DENSE_RANK() OVER (ORDER BY CorrectCount DESC) AS PlayerRank
FROM (
    -- 子查询先统计每个玩家的正确题数
    SELECT 
        pa.PlayerID,
        COUNT(qi.QuestionID) AS CorrectCount
    FROM PlayerAnswers pa
    JOIN QuizInfo qi ON pa.QuestionID = qi.QuestionID
    WHERE pa.PlayerAnswerID = qi.CorrectAnswerID
    GROUP BY pa.PlayerID
) AS PlayerCorrectStats
-- 最终按排名、玩家ID排序输出
ORDER BY PlayerRank, PlayerID;

补充说明

如果需要覆盖从未提交任何答案的玩家,但现有两张表中没有独立的玩家列表(所有玩家ID仅来自PlayerAnswers),那仅用这两张表无法统计这类玩家——因为他们在PlayerAnswers中没有记录。如果需求中的“所有玩家”仅指有答题记录的玩家,那上述方案完全适用。

内容的提问来源于stack exchange,提问作者Haiyan Jamali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:35:21