Группировка строк с использованием предварительно рассчитанного числа - PullRequest
0 голосов
/ 19 мая 2018

У меня есть таблица, как показано ниже:

id name address batch
1  t1   addr1    
2  t2   addr2 
3  t3   addr3
4  t4   addr4
5  t5   addr5
6  t6   addr6

Мне нужен sql для заполнения столбца пакета, используя предопределенный размер пакета.Так, например, если размер партии рассчитывается как 2, то таблица будет выглядеть следующим образом:

id name address batch
1  t1   addr1   1    
2  t2   addr2   1
3  t3   addr3   2
4  t4   addr4   2
5  t5   addr5   3
6  t6   addr6   3

Итак, поскольку размер партии равен 2, мы назначаем партию, начинающуюся с 1, для этого множестваколичество строк (в данном случае 2)

Кто-нибудь может мне помочь с sql?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Я бы использовал row_number():

select t.*,
       floor((row_number() over (order by id - 1))/2)
from t;

"2" - размер партии.

0 голосов
/ 19 мая 2018

Вам не нужно использовать floor функцию, просто используйте функцию ранжирования:

select b.*
      (1 + (row_number() over (order by id)-1) / 2) as batch
from batch b;
0 голосов
/ 19 мая 2018

Вы можете разделить идентификатор на 2, а затем закрыть его;1 будет 0,5, но ceiled = 1, 2 будет 1, так что это пакет 1. И т.д.

select
  id, name,
  ceil(id::decimal / 2) as batch_nr

from batch

order by id;

SQL Fiddle: http://sqlfiddle.com/#!17/ca419/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...