Postgresql

獲取最高值

  • May 30, 2016

我有以下數據:

account_id note_id size     id
---------- ------- ------ --------
48         1554    196036 28229509
48         1554    18777  28229588
48         1554    4861   28229566
48         1559    176406 28229516
48         1559    82041  28229521
48         1559    3063   28229541
48         1583    92150  28229514
48         1583    3495   28229501
48         1583    119203 28229534
8764       25556838 5126   28229567
8764       25556838 340618 28229508

我想size為每個 note_id 獲取列上最大值的 id。

例子:

note_id: 25556838
size: 340618
id: 28229508

note_id: 1583
size: 119203
id: 28229534

我怎樣才能得到這些數據?

可以使用視窗函式解決針對每個組的最大 n 的查詢:

select note_id, size, id
from (
  select note_id, size, id, 
         row_number() over (partition by note_id order by size desc) as rn
  from the_table
) t
where rn = 1;

以上是標準 SQL,但 Postgres 作為另一個(專有)功能可用於此:

select distinct on (note_id) note_id, size, id
from the_table
order by node_id, size desc;

distinct on ()解決方案通常比使用視窗函式的解決方案更快。

引用自:https://dba.stackexchange.com/questions/139953