Используйте функцию width_bucket
.См. документы , но вот краткая версия синтаксиса:
width_bucket(a, LBound, UBound, num_bins)
Чтобы заставить его работать должным образом для ваших корзин, я должен добавить 1 к UBound.Некоторые примеры:
select width_bucket( 1, 0, 5001, 50)
дает 1
select width_bucket(100, 0, 5001, 0)
дает 1
select width_bucket(101, 0, 5001, 50)
дает 2
select width_bucket(4900, 0, 5001, 50)
дает 49
select width_bucket(4901, 0, 5001, 50)
дает 50
Так что это работает, как ожидалось.Далее нам нужно сгенерировать правильную строку.Псевдоформат
(width_bucket - 1)*100 || '-' || (width_bucket)*100
Где ||является оператором конкатенации SQLИспользуя первый предыдущий пример:
select (width_bucket(1, 0, 5001, 50)-1)*100 || ' - ' || width_bucket(1, 0, 5001, 50)*100
дает '0 - 100'
Sweet.Теперь собираем все вместе.Сначала создайте таблицу для песочницы, которую вы можете использовать для тестирования.Это будет копия или частичная копия ваших данных:
CREATE TABLE test
AS
SELECT *
FROM original_table
Затем добавьте новый столбец в таблицу:
ALTER TABLE test
ADD COLUMN testgroup text
Теперь оператор UPDATE:
UPDATE test
SET testgroup = width_bucket(testint, 0, 5001, 50)-1)*100 || ' - ' ||
width_bucket(testint, 0, 5001, 50)*100