Oracle “Partition By” Keyword

前端 未结 6 896
不思量自难忘°
不思量自难忘° 2020-11-29 14:22

Can someone please explain what the partition by keyword does and give a simple example of it in action, as well as why one would want to use it? I have a SQL

6条回答
  •  无人及你
    2020-11-29 15:17

    The PARTITION BY clause sets the range of records that will be used for each "GROUP" within the OVER clause.

    In your example SQL, DEPT_COUNT will return the number of employees within that department for every employee record. (It is as if you're de-nomalising the emp table; you still return every record in the emp table.)

    emp_no  dept_no  DEPT_COUNT
    1       10       3
    2       10       3
    3       10       3 <- three because there are three "dept_no = 10" records
    4       20       2
    5       20       2 <- two because there are two "dept_no = 20" records
    

    If there was another column (e.g., state) then you could count how many departments in that State.

    It is like getting the results of a GROUP BY (SUM, AVG, etc.) without the aggregating the result set (i.e. removing matching records).

    It is useful when you use the LAST OVER or MIN OVER functions to get, for example, the lowest and highest salary in the department and then use that in a calculation against this records salary without a sub select, which is much faster.

    Read the linked AskTom article for further details.

提交回复
热议问题