Рассчитать общую оценку в запросе SQL из нескольких таблиц - PullRequest
0 голосов
/ 20 сентября 2010

У меня есть следующие таблицы для конкурса:

Пользователь:

  • Id
  • Имя
  • E-mail
  • EntryID

запись:

  • Id
  • Возраст
  • Пол
  • Государство

GameResult:

  • Id
  • EntryID
  • Продолжительность
  • Оценка

QuestionResult:

  • Id
  • EntryID
  • Корректное
  • UsersAnswer

Каждая запись будет иметь несколько игр и несколько вопросов. Мне нужно выполнить запрос, который найдет список самых высоких баллов, а затем разбить самый высокий балл по демографическим показателям, то есть по возрасту, полу, штату.

Расчеты следующие:

Каждому правильному вопросу будет присвоено значение балла, например, 10 баллов за каждый правильный ответ. Каждая игра будет иметь счет, уже определенный в своем столбце.

Таким образом, для записи, общий счет будет:

(Количество (правильное) * QuestionScore) + SUM (G1.Score, G2.Score, Gn.Score)

Не уверен, с чего начать при выяснении этого запроса.

1 Ответ

1 голос
/ 20 сентября 2010

обратите внимание, что индивидуальный ответ будет здесь уместен, поскольку у вас уже есть окончательный результат в таблице 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

, затем повторите то же самое для пола и штата.

edit: хорошо, я не уверен, что я следую вашему высокоуровневому дизайну здесь, но что угодно ... Вы должны сгруппировать свои результаты сначала по идентификатору записи, а затем по возрасту / полу / штату.Дополнительный уровень сложности, но в остальном точно такая же задача.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...