我想使用 PostgreSQL 的功能來獲取在ind或tar列中具有最長路徑的行,對于相同的id,ind_id和tar_id。
例如:
在下表中,由于第 1、2、3 行具有相同的id=1,ind_id=2和tar_id=3,我只想取第三行,因為陣列tar={7,8,9}, 比{7,8} (2nd row)和{7} (1st row) 長。
同樣,第 4 行和第 5 行對于id,ind_id和具有相同的值tar_id,并且由于列中陣列的長度ind在第 5 行中更長,因此我只想保留該行,并洗掉第 4 行。
由于我是 PostgreSQL 世界的新手,有人可以給我一個提示嗎?
text id ind_id tar_id ind tar
1 bla bla 1 2 3 {4} {7}
2 bla bla 1 2 3 {4} {7,8}
3 bla bla 1 2 3 {4} {7,8,9}
4 bla bla 1 2 33 {5} {10}
5 bla bla 1 2 33 {5,6,7} {10}
uj5u.com熱心網友回復:
使用distinct on與order by id, ind_id, tar_id和最大的陣列長度ind和tar。
select distinct on (id, ind_id, tar_id)
"text", ind_id, tar_id , ind, tar, pmid
from the_table
order by id, ind_id, tar_id,
greatest(array_length(ind, 1), array_length(tar, 1)) desc;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352982.html
標籤:PostgreSQL
上一篇:生成文本檔案的MD5校驗和值
下一篇:兩列的SQL唯一組合,反之亦然
