sqlite подзапрос для группы ранжированных предметов - PullRequest
1 голос
/ 22 февраля 2012

Таблица состоит из трех столбцов (группа, ранг, оценка) с составным первичным ключом (группа, ранг). Каждая группа имеет как минимум одну запись с рангом 1 и баллом. Если в группе более одной строки, она будет иметь ранг больше единицы и оценку. Например:

+-------+------+-------+
| Group | Rank | Score |
+-------+------+-------+
|     1 |    1 |   100 |
|     1 |    2 |    99 |
|     1 |    3 |    80 |
|     2 |    1 |    70 |
|     2 |    2 |    68 |
|     2 |    3 |    50 |
|     2 |    4 |    20 |
|     3 |    1 |    80 |
+-------+------+-------+

Моя цель состоит в том, чтобы выбрать все строки, «близкие» к максимальному баллу каждой группы, где максимальный балл определен как значение ранга 1 для каждой группы. В приведенном выше примере группа 1 имеет максимальный балл 100, группа 2 имеет максимальный балл 70, группа 3 имеет максимальный балл 80. Мы хотим выбрать все строки, которые не более чем на 5% меньше, чем максимальные баллы. Для приведенного выше примера результирующее выделение вернет:

+-------+------+-------+
| Group | Rank | Score |
+-------+------+-------+
|     1 |    1 |   100 |
|     1 |    2 |    99 |
|     2 |    1 |    70 |
|     2 |    2 |    68 |
|     3 |    1 |    80 |
+-------+------+-------+

Моя вторая цель состоит в том, чтобы поместить соотношение показателя / top_score в качестве нового столбца, который устранил бы вышеуказанную цель. Заранее спасибо. Для SQLite.

1 Ответ

1 голос
/ 22 февраля 2012

Не проверено, от макушки головы.

SELECT s."Group"
  , s."Rank"
  , s."Score"
  , s."Score"/ts."Score" as "ScoreRatio"
FROM scores s
  JOIN (
      SELECT "Group", "Score"
      FROM scores
      WHERE "Rank" = 1
  ) ts
  ON s."Group" = ts."Group"
    AND 0.95 * ts."Score" <= s."Score"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...