SQL - группа на каждые 2 записи - PullRequest
0 голосов
/ 27 февраля 2020

Исходная таблица:

id    rank
A      1  
B      1  
D      2  
E      2  
G      3  
H      3  
I      4  
J      5  
K      6  
L      6  
M      7  

Хотелось бы добавить еще один столбец группы - значение будет + 1 каждые 2 записи:

id    rank  group 
A      1      1
B      1      1
D      2      1
E      2      1
G      3      2
H      3      2
I      4      2
J      5      3
K      6      3
L      6      3
M      7      4

Что я могу думать может только жестко закодировать «случай, когда» условие для ранжирования. Поскольку таблица может быть большой, есть ли другая функция, которая может динамически группировать запись?

Случай, когда ранг> 0 и ранг <= 2, затем 1 <p>Когда ранг> 2 и ранг <= 4, то 2 <p>Когда ранг> 4 и ранг <= 6, тогда 3 заканчивают группу <p>....

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Использование функции ceil() будет прямой опцией после деления столбца rate на 2:

SELECT id, rank, ceil( rank / 2 ) as "group"
  FROM tab;

Btw, Я заменил group на "group", так как это зарезервированное ключевое слово

0 голосов
/ 27 февраля 2020

Это достижимо при использовании dense_rank()

select dense_rank() over (partition by rank % 2  order by id) as grouping, rank 
from tableA 
order by rank
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...