Postgresql Как группировать и заполнять поля

У меня таблица с полем была хеширована следующим образом:

order_id, order_detail_id

//qwe221, jdeiwe

//qwe221, eudasd

kasdaw25, saderf

kasdaw25, syehsd

kasdaw25, kredss

Я хочу, чтобы это было так, чтобы было легче поддерживать

order_id, order_detail_id, order_id_alias

//qwe221, jdeiwe, 1

//qwe221, eudasd, 1

kasdaw25, saderf, 2

kasdaw25, syehsd, 2

kasdaw25, kredss, 2

Пожалуйста, помогите мне, объясните, как это сделать шаг за шагом НА SQL. Спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
42
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

использовать оконную функцию

select *, dense_rank() over(order by order_id) order_id_alias from t

Оно работает! Благодарность! а теперь как вставить результат в поле order_id_alias в db?

Brenda Natasha 18.12.2018 10:46

это работает следующим образом: с new_values ​​as (select *, density_rank () over (order by order_id) diff from t) update t set order_id_alias = new_values.diff from new_values, где new_values.order_id = t.order_id; можно ли определить начальный номер density_rank? вроде должно начинаться с 1000?

Brenda Natasha 18.12.2018 11:39

Вы можете вставить, используя,

INSERT INTO table_name (col_1, col_2, col_3)
SELECT col_1, col_2, col_3
FROM another_table
WHERE col_1 = 'value';

Вы можете обновить таблицу, используя:

update t
    set order_id_alias = tt.seqnum
    from (select order_id, row_number() over (order by order_id) as seqnum
          from t
          group by order_id
         ) tt
    where t.order_id = tt.order_id;

Примечание. Возможно, вам потребуется добавить столбец order_id_alias в таблицу, если его там еще нет.

Другие вопросы по теме