sql >> データベース >  >> RDS >> Oracle

over()とパーティションを理解しようとしています

    注文日で注文してみてください。結果がわかりやすくなります

    select Row_Number() over(partition by orderdate order by orderdate asc) 
        as Rownumber, salesorderid, orderdate
    from test2
    order by orderdate;
    

    与える必要があります(わかりやすくするために空白行を追加しました)

    ROWNUMBER     SALESORDERID       ORDERDATE
    1             43664              07/01/2001
    
    1             43911              08/01/2001
    2             43867              08/01/2001
    3             43895              08/01/2001
    4             43894              08/01/2001
    5             43877              08/01/2001
    
    1             44109              09/01/2001
    
    1             44285              10/01/2001
    
    1             44483              11/01/2001
    2             44501              11/01/2001
    

    結果が「パーティション」に分割され、各パーティションが同じ注文日を持つ行のセットであることがわかります。それが「orderdateによるパーティション」の意味です。

    パーティション内では、行は'(orderdate ascによるorderdateによるパーティション)'の2番目の節に従ってorderdateによって順序付けられます。パーティション内のすべての行が同じorderdateを持つため、これはあまり役に立ちません。そのため、パーティション内の行の順序はランダムです。より再現性の高い結果を得るには、partitionby句内でsalesorderidで注文してみてください。

    row_number()は、各パーティション内の行の順序を返すだけです



    1. 動的パーティショニング+HIVEでのCREATEAS

    2. ORACLEとTRIGGERS(挿入、更新、削除)

    3. PostgreSQLでのsqrt()のしくみ

    4. Windows認証を使用したクロスドメインSQLServerログイン