Динамическая маркировка пользователей по счету - PullRequest
0 голосов
/ 04 февраля 2010

У меня есть таблица с пользователями и их оценками, десятичное число в диапазоне от 1 до 10. Таблица (user_id, оценка) У меня также есть запрос в 1 строку со средним значением оценок (около 6) и стандартнымотклонение (около 0,5).Я использую MS Access 2007.

Я хочу пометить пользователей A, B, C, D, где:

  • A имеет оценку выше, чем (avg + stdev);
  • B имеет оценку ниже, чем A, но выше, чем в среднем;
  • C имеет балл ниже среднего, но выше (avg-stdev)
  • D имеет балл ниже (avg-stdev).

Если я экспортирую все данные в Excel, я могу легко вычислить значения и импортировать их обратно в базу данных.Очевидно, это не самый элегантный способ.Я хотел бы сделать это с SQL в качестве запроса.Результатом должна быть таблица (user_id, label)

Но как?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Вы можете использовать перекрестное объединение, чтобы присоединить своих пользователей к статистическому запросу в 1 строку. Затем вы можете использовать вложенный IIF для расчета оценки.

Как то так ...

SELECT  users.*,grade.*
,iif(users.score>grade.high,"A",iif(users.score>grade.average,"B",iif(users.score>grade.low,"C","D"))) as label
FROM (SELECT round(avg(users.score)-stdev(users.score),1) as low
,round(avg(users.score),1) as average
,round(avg(users.score)+stdev(users.score),1) as high
FROM users)  AS grade, users;
0 голосов
/ 04 февраля 2010

ИИФ сделали свое дело.

Я принял Запрос со средними баллами, чтобы добавить минимальные баллы A, B и C

Table(avg,stdev,Ascore,Bscore,Cscore) as averages

Окончательный запрос выглядел как

SELECT user.Id, user.avgScore, 
IIf(avgScore>averages.Ascore,"A",
 IIf(avgScore>averages.Bscore,"B",
  IIf(avgScore>averages.Cscore,"C","D"))) AS label
FROM averages, users
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...