2017-07-17 6 views
1

特定の共有特性に基づいて、各グループまたは行のパーティションに番号を付けるには、どのようにウィンドウ関数などを使用しますか?例えばPostgreSQLの各グループに番号を付ける方法

私はグループに希望のアルファベット順の名前のリストを持っており、各グループ内で、彼らが属するグループと位置を記述するIDを使用して識別します。

------------------------------------------- 
| 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

関連する問題