それはあなたが望むものに完全に依存します。提案された結果のいずれかを取得するには、解析句をrank() over (order by surname)
にする必要があります。このクエリでは、surname
の昇順に各レコードのrank
が表示されます。同じ姓の2人がいるので、その2人の順序は理論的にはでなければなりません。これは、rank()
が実際には結果セットの順序付けを行わないため、これを行うにはorder by
句が必要です。少なくともあなたが望む結果を保証するために。以下のような
何か:
select rank() over (order by surname asc, familyname asc) as rnk
, surname, familyname
from my_table
order by rank() over (order by surname asc, familyname asc)
このクエリは、昇順姓と姓の順に姓、姓とランクを返します。結果セットが、それは次のようになります。つまり、ランクによって順序付けされます。
1 | Kovács | Albert
2 | Kovács | Dávid
3 | Nagy | Balázs
これは、利益と分析関数の問題です、あなたはあなたがしたいものの中にいます場合には、大規模特定することができあなたが実行したクエリに正確な回答が必要な場合
documentationは、partition by
節を使用した別の例です。これをクエリに適用する場合は、surname
でパーティション化し、familyname
で注文すると、クエリと結果セットは次のようになります。
select rank() over (partition by surname order by familyname asc) as rnk
, surname, familyname
from my_table
2 | Kovács | Dávid
1 | Kovács | Albert
1 | Nagy | Balázs
これは、我々が個別に各姓のためのすべてのfamilynamesをランク付けすることを意味します。 DávidがAlbertの後にあるので、彼はKovácsという姓で2のランクを取得します。 order by
を指定しない場合、結果セットを順序付ける必要はありません。
出典
2012-03-17 22:53:32
Ben
実際のテストを行う場合は、無料でOracle XEをダウンロードしてインストールできます。 –