SQL: вычислить интервал, в который попадает значение - PullRequest
0 голосов
/ 10 октября 2018

У меня есть такой столбец:

column1   
      4
     12
     23
      6
     14
     35

Я хочу создать рядом с ним другой столбец, который будет отображать диапазон, в который попадает значение из column1, например:

column1        column2  
      4            0-5
     23          21-25 
      6           6-10
     14          11-15
     33          31-35 

Кажется, это простая задача ранжирования, но у меня проблемы с ее выполнением.Я довольно новичок в SQL и, возможно, пропустил что-то базовое.Так что, может быть, просто укажите мне направление туда, где я сейчас, потому что я потерян.

До сих пор я изучал использование CASE (безуспешно) и RANK().Последнее вообще не работает для меня, так как даже не выделено как ключевое слово (я использую Sybase Interactive SQL v12.0.1).Хотя мне кажется, что RANK() - это не тот путь, даже если он работал, поскольку мне нужно, чтобы мои значения ранжировались в точных диапазонах (от 0 до 35 с шагом 5).

Спасибо всем заранее!

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

выберите col1, concat (этаж (col1 / 5) * 5, '-', 5 + этаж (col1 / 5) * 5)

0 голосов
/ 10 октября 2018

Если вы хотите сгруппировать значения внутри 0-5 (особый случай), 6-10, 11-15 и т. Д., Просто используйте следующий запрос (написанный для SQL Server, но иллюстрирующий идею):

SELECT num, CONCAT(
    CASE WHEN num <= 5 THEN 0 ELSE FLOOR((num - 1) / 5) * 5 + 1 END,
    '-',
    CASE WHEN num <= 5 THEN 5 ELSE FLOOR((num - 1) / 5) * 5 + 5 END
)
FROM ...

Тесты на БД Fiddle

Заменить FLOOR(x / y) на целочисленный оператор деления, если он доступен.
Заменить CONCAT на соответствующий оператор или функцию объединения строк.

0 голосов
/ 10 октября 2018

или concat(column1-(column1%5), "-", column1-(column1%5)+5)

0 голосов
/ 10 октября 2018

Вы можете сделать что-то вроде этого:

select col1,
       concat( floor(col1 / 5) * 5, '-', 5 + floor(col1 / 5) * 5)

Вы также можете использовать '||'оператор:

select col1,
       floor(col1 / 5) * 5 || '-' || (5 + floor(col1 / 5) * 5))

Или любой другой метод, используемый вашей базой данных для конкатенации строк.

...