我有以下竞赛表:
每个条目都有多个游戏和多个问题。我需要执行一个查询,找到最高分的列表,然后按人口统计分析最高分,即年龄,性别,州。
计算如下:
每个正确的问题都会分配一个分数值,例如:每个正确答案10分。每个游戏的分数都已在其专栏中定义。
因此,对于一个条目,总分将是:
(Count(Qn.Correct)* QuestionScore)+ SUM(G1.Score,G2.Score,Gn.Score)
不确定从何处开始查询此查询。
答案 0 :(得分:1)
请注意,由于您已经在GameResult表上获得最终得分,因此确保个人答案得分与此相关。
select e.Age, max(gr.Score) as Score
from Entry e
inner join GameResult gr on(gr.EntryID=e.EntryID)
group by e.Age
然后对性别和州重复同样的事情。
编辑:好的,我不确定我是否在这里关注你的高级设计,但无论如何...... 您需要先按条目ID对结果进行分组,然后按年龄/性别/州进行分组。额外的复杂程度,但其他任务完全相同。
with GameResultScore as (
select EntryID, sum(Score) as Score
from GameResult
group by EntryID
),
QuestionResultScore as (
select EntryID, count(*) CorrectAnswers
from QuestionResult
where Correct=1
group by EntryID
)
select e.Age, max(isnull(grs.Score,0)+isnull(qrs.CorrectAnswers,0) * QuestionScore) as Score
from Entry e
left join GameResultScore grs on(grs.EntryID=e.EntryID)
left join QuestionResultScore qrs on(qrs.EntryID=e.EntryID)
group by e.Age