Извлечь значение в некотором диапазоне

#sql

#sql

Вопрос:

У меня есть следующая таблица

Очки:

 min max level
0   5    1
6   10   2
11  15   3
16  20   4
  

и мне нужно извлечь уровни в соответствии с точками. Если у меня есть 7 баллов, то уровень будет равен 2, а запрос следующим:

 select level
from points
  where 7 > min
  AND 7 < max
  

что мне нужно, так это получить наивысший уровень, если баллов больше 20, например, если у меня 35 баллов, уровень должен быть 4. Как я могу это сделать?

Комментарии:

1. если я правильно понимаю вашу проблему, то: SELECT level FROM points WHERE max > 20 должно быть то, что вы ищете

2. затем он вернет все уровни

3. «точек больше 20»? Разве точки не являются таблицей ?

4. Почему оно должно быть 4-го уровня, если точек 35? Разве это не должен быть уровень 5?

Ответ №1:

Установите max в последней строке равным null:

 | 16 | null  | 4
  

И ваш запрос становится:

 SELECT level
  FROM points
 WHERE :score >= min
   AND (:score <= max OR max is null)
  

Примечание: лучше определить ваши диапазоны как [min, max[:

 min max level
0   6    1
6   11   2
11  16   3
16       4
  

Затем ваш запрос становится:

 SELECT level
  FROM points
 WHERE :score >= min
   AND (:score < max OR max is null)