2017-07-17 19 views
1

如何根據某些共享特徵使用窗口函數或類似的方法來爲每個組或行的分區編號?如何在PostgreSQL中爲每個組編號

例如:

我有字母順序排列的,我想組名稱的列表,並確定使用描述每個組內,它們所屬的組和位置標識。

------------------------------------------- 
| outer_id | inner_id | src_id | name | 
|----------|----------|--------|----------| 
|  1 |  1 | 88129 | albert | 
|  1 |  2 | 88130 | albrecht | 
|  1 |  3 | 88131 | allan | 
|  2 |  1 | 88132 | barnaby | 
|  2 |  2 | 88133 | barry | 
|  2 |  3 | 88134 | bart  | 
------------------------------------------- 

我可以inner_idsrc_idname使用類似於下面的查詢實現:

WITH cte (src_id, name) AS (

    VALUES 

    (88129, 'albert'), 
    (88130, 'albrecht'), 
    (88131, 'allan'), 
    (88132, 'barnaby'), 
    (88133, 'barry'), 
    (88134, 'bart') 

) 

SELECT row_number() OVER (partition by left(name, 1) ORDER BY name DESC) AS inner_id, src_id, name 
FROM cte; 

我如何去增加一個outer_id柱如圖所示,以表示每個窗口(或組) ?

回答

0

您可以使用dense_rank()

select dense_rank() over (order by left(name, 1)) as outer_id, 
     row_number() over (partition by left(name, 1) order by name desc) as inner_id, 
     src_id, name 
from cte; 
+0

優秀 - 謝謝你戈登,同時還爲例子。 – atdfairfax

相關問題