从多个表中计算SQL查询的总分

时间:2010-09-20 01:09:49

标签: sql-server tsql

我有以下竞赛表:

用户:

  • 编号
  • 名称
  • 电子邮件
  • ENTRYID

项:

  • 编号
  • 年龄
  • 性别
  • 国家

GameResult:

  • 编号
  • ENTRYID
  • 持续时间
  • 得分

QuestionResult:

  • 编号
  • ENTRYID
  • 正确
  • UsersAnswer

每个条目都有多个游戏和多个问题。我需要执行一个查询,找到最高分的列表,然后按人口统计分析最高分,即年龄,性别,州。

计算如下:

每个正确的问题都会分配一个分数值,例如:每个正确答案10分。每个游戏的分数都已在其专栏中定义。

因此,对于一个条目,总分将是:

(Count(Qn.Correct)* QuestionScore)+ SUM(G1.Score,G2.Score,Gn.Score)

不确定从何处开始查询此查询。

1 个答案:

答案 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