Postgresql
Postgresql 按分組列更新表行值
首先介紹一點背景:
我目前有一個表,其中包含來自我的業務的入站和出站呼叫數據,直到最近還沒有可用的api_id數據,但是這是我的供應商 API 的最後更新,因此我有一些歷史呼叫數據可以按call_id分組。
我要做的是更新數據庫中沒有 api_id 的現有行,並使用隨機字元串將它們按 call_id 分組。
| ... | call_id | api_id | |------------------------| | ... | 123 | AAA | | ... | 456 | | | ... | 456 | | | ... | 788 | | | ... | 789 | | | ... | 789 | |
然後會變成:
| ... | call_id | api_id | |------------------------| | ... | 123 | AAA | | ... | 第456章 全球健康聯盟 | | ... | 第456章 全球健康聯盟 | | ... | 788 | ZPM | | ... | 第789章 LFF | | ... | 第789章 LFF |
通過分組查詢有效地進行更新,我已經進行了搜尋但找不到任何東西。
如果這裡的任何人可以幫助或指出我正確的方向,將不勝感激。
數據庫技術:Postgresql 9.5.4
簡單的答案 - 因為虛擬值
api_id
無關緊要:使用call_id
:update the_table set api_id = call_id::text where api_id is null;
複雜的答案:
假設您有某種生成隨機字元串的方法,您可以執行以下操作(未經測試):
update the_table set api_id = t.random_string from ( select distinct on (call_id) call_id, random_string() as random_string from the_table where api_id is null order by call_id ) t where t.call_id = the_table.call_id and the_table.api_id is null;
這會在內部查詢中使用每個 call_id 生成一行,並為每個查詢生成一個隨機值。然後使用此結果更新目標表。
上面假設如果已經有一個特定的值,那麼所有行
call_id
都有一個。它不會“填充”其他行缺少的 api_id (例如,如果有一行但沒有)call_id = 123``api_id