You are on page 1of 16

3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions


2   More    Next Blog»   Dashboard   Sign Out

Oracle Interview Help Page
Tuesday, 8 January 2013 There was an error in this gadget

Oracle Questions­Part­2[Analytical functions] Popular Posts

Analytical Functions Oracle Questions­Part­2[Analytical
Q. Some basic analytical functions for interview preparation.
Oracle Interview Questions­Part­1 [Basic
I am trying to describe the use of analytical function in a simple way, here with some example,
Few analytical functions are as follows:    Few sample questions from 1Z0­051 Exam.
Unix Interview questions
Lead and Lag Few sample questions from 1Z0­051 Exam.
Part I
Cube Blog Archive
Rollup ►  2012 (6)
Connect by Prior
▼  2013 (14)
Pre­requisit  ▼  January (9)
What is over() clause do? ­ OVER() is a mandatory key word,it defines the scope of Oracle Interview Questions­Part­1 [Basic
that function, here  'OVER()'  means ALL columns in other hand   'OVER(partition by
deptno)'  means it will look into specifically deptno and partition by clause will do High Water Mark concept
group by on deptno column. I will give some example below ,which will clear your Data Loading in Oracle
doubt about this.
Oracle Questions­Part­2[Analytical
What does PARTITION BY clause denote? ­ As mentioned earlier the PARTITION functions]
BY clause is similar to GROUP By clause, it specifies the window of rows that the Oracle Questions­Part­3[Few Important
analytic function should operate on. queries]
Analytical function ­ RANK­questions­part­2analytical.html 1/16

blogspot.  Hindol Saha Chowdhury        department_id.employees  your comment at the end. India        COUNT(*) OVER (PARTITION BY department_id ) DEPT_COUNT  FROM hr. ►  July (2) ►  October (1) Example: Simple query 1: ►  November (2) ►  2015 (3) select        department_id.If you observe Query1 groups record based http://oracleinterviewhelp.         count(*)  If you think this article is useful please place from hr.html 2/16 . with help of various joins and sub­ Analytical function ­ DENSE_RANK­questions­part­2analytical. WHERE department_id  IN (20. I am trying to give a Data Loading [Sqlldr Direct Path] Part ­2 platform here to help with this features.   View my complete profile     Search This Blog     Search     Followers Here in this two query one can write his/her query in any of this two method. Hope all my friends and   reader will help me to improve this blog by   their valuable comments. But we use oracle analytical function to replace basic SQL for faster performance.60) with clicking (Yes/No).3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Whatever an analytic function does can be done by basic SQL. Mumbai.Or you can vote here where department_id in (90. group by department_id; Your comment will help me to improve my knowledge as well as this post department_id   count(*) ­­­­­­­­­­­­­­    ­­­­­­­­ 60   5 About Me 90   3 Rewrite query 2: SELECT          EMPLOYEE_ID.employees  I have started to design this blog to help all my friends and their friends to crack interviews. 30); The contains of this blog are not fully mine its from several Oracle guru's genius ideas and   papers I have tried to collect here and tried to   add as much as example to get better   understanding. Some Analytical function ­ Lead and Lag of us used to avoid analytical functions due to lack of knowledge on this. Maharastra.

 department_id.Non­group by columns are notallowed in select statement.blogspot. 39 mins ago EMPNO   DEPTNO  DEPT_COUNT  Maharashtra viewed "Oracle ­­­­­­­­­­  ­­­­­­­­­­   ­­­­­­­­­­ Interview Help Page: Oracle 100   90  8 Questions­Part­2[Analytical 101   90  8 functions]" 15 hrs 26 mins ago 102   90  8 A visitor from Long Island 103   60  8 City. Though analytic functions give aggregate result they do not group the result set. They return the group value multiple times Follow with each record as shown in query2. 26 mins ago SELECT *  California viewed "Oracle from hr. WHERE clause.html A visitor from India viewed 3/16 . New York viewed 104   60  8 "Oracle Interview Help Page: 105   60  8 Oracle Questions­Part­ 2[Analytical functions]" 16 hrs http://oracleinterviewhelp. count(*) District of Columbia viewed ­­­­­­­­­­­ "Oracle Interview Help Page: 8 Unix Interview questions" 3 A visitor from Chennai.   A visitor from Kursk viewed mins ago                  COUNT(*) OVER () DEPT_COUNT  "Oracle Interview Help Page: FROM­questions­part­2analytical. 60); 2[Analytical functions]" 8 hrs A visitor from Mumbai. the function acts on Live Traffic Feed entire record set returned by the where clause. Interview Help Page: DBMS_PROFILER" 4 hrs 11 SELECT   EMPLOYEE_ID. A visitor from India viewed "Oracle Interview Help Page: Analytic functions are computed after all joins. So analytic functions can only appear in the select list and in the main ORDER BY secs ago District of Columbia viewed clause of the query. In absence of any partition or window_clause inside the OVER( ) portion. GROUP BY and HAVING are Oracle Questions­Part­ computed on the query. Tamil hrs 15 mins ago Note: It will show you 8 records in result output means has total 8 records for those two Nadu viewed "Oracle department.employees   Interview Help Page: Oracle WHERE department_id IN (90. functions. The main ORDER BY clause of the query operates after the analytic 2[Analytical functions]" 44 A visitor from Washington.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] on department id and whatever you want to group by it is mandatory to put those columns in Followers (7) select clause as well as group by clause same number of columns. "Oracle Interview Help Page: Oracle Questions­Part­ So we will see here how OVER() works in below query except any partition clause. Where in analytical function oracle given us the freedom to use any columns based on functionality it does not depend on any type of clause like GROUP BY. 60); Questions­Part­2[Analytical functions]" 3 hrs 9 mins ago A visitor from Washington.employees  Oracle Questions­Part­ WHERE department_id  IN (90. 2[Analytical functions]" 2 hrs A visitor from San Francisco.

PARTITION clause is important to group your result A visitor from Johannesburg.So PARTITION BY is used to break the result set into groups.One very common question in interview is find out nth highest salary department wise.        salary  from hr.         rank() over(order by salary desc) As RNK from hr.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] 2[Analytical functions]" 16 hrs 106   60  8 A visitor from India viewed 43 mins ago 107   60  8 "Oracle Interview Help Page: Oracle Questions­Part­ Note: So from the above output we saw that it doesn't group based on department_id  IN (­questions­part­2analytical. Form this we are going to show you NTH highest salary query.html 4/16 .        department_id. 36 mins ago based on values.employees   WHERE department_id IN (90. Gauteng viewed "Oracle ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Interview Help Page" 19 hrs 14 mins ago Real­time view · Get Feedjit Rank Q. 60);                         From this output for Dept 60 it has 5 rows and for Dept 90 it has 3 rows.        salary. 60) 2[Analytical functions]" 17 hrs as we omitted PARTITION clause here. select         employee_id. 60); http://oracleinterviewhelp.employees   WHERE department_id IN (90. There was an error in this gadget SELECT         employee_id.        department_id.

       sal_ord. As per below query we fired the same for RANK() as well.department_id­questions­part­2analytical.               salary.employees  WHERE department_id IN (90.salary Sal. http://oracleinterviewhelp. 60) ) sal_ord WHERE sal_ord.               department_id.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] employee_id   department_id   salary    RNK ­­­­­­­­­­­­    ­­­­­­­­­­­­     ­­­­­­­    ­­­­­­­­­­­­­­ 100             90             24000                 1 102             90             17000                 2 101             90             17000                 2 103             60             9000                   4 104             60             6000                   5 105             60             4800                   6 106             60             4800                   6 107             60             4200                   8 In this query we can idetify rank from RNK column and one can easily write down NTH highest query from this. SELECT         sal_ord. Difference between RANK()   and DENSE_RANK().               RANK () OVER (PARTITION BY department_id ORDER BY salary DESC) AS Rnk FROM hr.        sal_ord.html 5/16 .Rnk Rnk FROM (               SELECT employee_id.employee_id Eid.Rnk = 1; Eid    DeptCd     Sal     Rnk ­­­­    ­­­­­­­­­   ­­­­   ­­­­­ 103    60        9000      1 100    90      24000      1 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Dense_rank Q.        sal_ord.blogspot. Below query will show highest salary from each department.

       department_id.  http://oracleinterviewhelp.        department_id.  rank() over(order by salary desc) As RNK from hr.blogspot. 60); employee_id   department_id   salary    RNK ­­­­­­­­­­­­    ­­­­­­­­­­­­     ­­­­­­­    ­­­­­­­­­­­­­­ 100             90             24000                 1 102             90             17000                 2 101             90             17000                 2 103             60             9000                   4 104             60             6000                   5 105             60             4800                   6 106             60             4800                   6 107             60             4200                   8 Dense_rank() example  select         employee_id.        salary.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Rank() example  select         employee_id.        salary.employees   WHERE department_id IN (90.employees   WHERE department_id IN (90. one can easily identify the difference.html 6/16 .in/2013/01/oracle­questions­part­2analytical. 60); employee_id   department_id   salary    RNK ­­­­­­­­­­­­    ­­­­­­­­­­­­     ­­­­­­­    ­­­­­­­­­­­­­­ 100             90             24000                 1 102             90             17000                 2 101             90             17000                 2 103             60             9000                   3 104             60             6000                   4 105             60             4800                   5 106             60             4800                   5 107             60             4200                   6 Please check highlighted RNK column.         dense_rank() over(order by salary desc) As RNK from hr.

3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] select         employee_id.              Dense_rank() over(                               partition by department_id order by salary desc) As DNS_RNK.              salary.blogspot.               rank() over(                               partition by department_id order by salary desc) As RNK.employees   WHERE department_id IN (90.              row_number() over(                               partition by department_id order by salary desc ) RwNm from hr.Row_Number select              employee_id. 60); employee_id      department_id    salary     RNK      DNS_RNK ­­­­­­­­­­­­               ­­­­­­­­­­­­          ­­­­­­­      ­­­­­­­­      ­­­­­­­­­­­­ 100            90                        24000            1             1 102            90                        17000            2             2 101            90                        17000            2             2 103            60                        9000              4             3 104            60                        6000              5             4 105            60                        4800              6             5 106            60                        4800              6             5 107            60                        4200              8             6 Note:   The DENSE_RANK function acts like the RANK function except that it assigns consecutive ranks ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ All together Rank().        salary.         rank() over(order by salary desc) As RNK.              department_id.        department_id.        Dense_rank() over(order by salary desc) As DNS_RNK from hr.html 7/16 .in/2013/01/oracle­questions­part­2analytical.employees  WHERE department_id IN (90. 60); http://oracleinterviewhelp.Dense_Rank().

 1.  SELECT         department_id.blogspot. 60) ORDER BY department_id. 1.html 8/16 . salary DESC; ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­                                                                                                                 http://oracleinterviewhelp. 0) OVER (PARTITION BY department_id ORDER BY salary DESC NULLS LAST) PREV_HIGHER_SAL FROM hr.        LAG (salary.employees  WHERE department_id IN (90.         LEAD (salary.        employee_id.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Output                         ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Lead and Lag LEAD has the ability to compute an expression on the next rows. 0) OVER (PARTITION BY department_id ORDER BY salary DESC NULLS LAST) NEXT_LOWER_SAL.Lag is same as LEAD except LAGS goes into previous row.­questions­part­2analytical.

blogspot.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions]   First_Value and LAST_VALUE   1. 30) ORDER BY department_id. The LAST_VALUE function is used in similar context except that it acts on the last record of the partition.        department_id.html 9/16 .employees  WHERE department_id IN (­questions­part­2analytical.         LAST_VALUE (hire_date) OVER (PARTITION BY department_id) last_hire  FROM hr. last_hire; ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­­­­­­­­­­                                                                                                               http://oracleinterviewhelp. The FIRST_VALUE analytic function picks the first record from the partition after doing the ORDER BY 2. First_hire.        FIRST_VALUE (hire_date) OVER (PARTITION BY department_id) immediate next value SELECT         employee_id.

BLAKE.JAMES.html 10/16 .SMITH   30           ALLEN.MILLER 20 ADAMS.employees  GROUP BY department_id; DEPTNO               EMPLOYEES  ­­­­­­­­­­                  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­   10           CLARK.TURNER. wm_concat() SELECT              department_id.BLAKE.WARD Note: We can get the same output with some other function if those are available in your version of DB.blogspot.JONES.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Listagg SELECT     ­questions­part­2analytical. http://oracleinterviewhelp.               LISTAGG(FIRST_NAME.SMITH   30           ALLEN.MARTIN.MILLER 20 ADAMS.MARTIN.FORD.JONES.KING.KING.              wm_concat(FIRST_NAME) AS employees  FROM hr.FORD.') WITHIN GROUP (ORDER BY FIRST_NAME)  FROM hr.WARD ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Q.employees  GROUP BY department_id; DEPTNO         EMPLOYEES  ­­­­­­­­­­            ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­   10           CLARK.'.TURNER.SCOTT.SCOTT.JAMES. Difference between ROLLUP and CUBE? A simple difference will show the difference. Exaple as follows:  Rollup select           department_id.

blogspot. select           department_id.job_id) order by department_id; Output                           Cube Note: Here we will use CUBE insist of rollup to check output differences.20) group by Cube(­questions­part­2analytical.job_id) order by department_id; Output http://oracleinterviewhelp.           sum(salary) from hr.           job_id.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions]           job_id.employees  where department_id in (10.20) group by rollup(department_id.html 11/16 .           sum(salary) from hr.employees  where department_id in (10.

job_id) order by department_id ); Output http://oracleinterviewhelp.employees          where department_id in (10.  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ ROW_NUMBER select  row_number() over(order by sal ). which can easily identify the difference between this two.sal from  (         select sum(salary) as sal          from hr.blogspot.html 12/16 .in/2013/01/oracle­questions­part­2analytical.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions]                                   Here one can see extra layer of information are in output.20)         group by cube(department_id.

ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING) It will gives us some more filtration more flexible output.....What is windowing_clause?Functionality?  We have discussed about over() and partition clause and how does those helps a query to grouping the output and gave us a control over data output.. And now window_clause is same as others. order by . The windowing_clause has two basic forms..blogspot.) clause... It is basically a extension of order_by_clause which we use within over(partition by . order by .. RANGE BETWEEN start_point AND end_point  ROWS BETWEEN start_point AND end_point Possible values for "start_point" and "end_point" are: http://oracleinterviewhelp..html 13/16 .in/2013/01/oracle­questions­part­2analytical.... Instead of this example it will look like with window clause is  over(partition by ...3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions]                                       ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Q.. actually it gives another layer or further control over this window with current partition.....

CURRENT ROW : Window starts or ends at the current­questions­part­2analytical.blogspot. To be continued Next topics: Connect by Prior http://oracleinterviewhelp. value_expr FOLLOWING : As above. it can also be an interval literal if the order_by_clause uses a DATE column.html 14/16 . UNBOUNDED FOLLOWING : Window ends at the last row of the partition.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] UNBOUNDED PRECEDING : Window starts at the first row of the partition. When used with RANGE. but an offset after the current row.Available for start points. value_expr PRECEDING : An physical or logical offset before the current row using a constant or expression that evaluates to a positive numerical value. Available for end points.

in/2013/01/oracle­questions­part­2analytical.html 15/16 .blogspot.keep posting more Reply Anonymous 2 March 2014 at 11:19 Thanks..3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Posted by Hindol Saha Chowdhury at 22:23  +2   Recommend this on Google 5 comments: Vivekanand Bhat 12 November 2013 at 10:11 Very Helpful Reply Anonymous 25 December 2013 at 07:27 really helpful. Reply S U M I T 10 June 2016 at 18:15 Really helpful Reply Mohit Sharma 9 December 2016 at 14:26 This post is very intuitive and very well explained :) thanks Reply http://oracleinterviewhelp. Good explanation and useful.

..blogspot. Powered by­questions­part­2analytical. http://oracleinterviewhelp. Theme images by nicodemos.3/24/2017 Oracle Interview Help Page: Oracle Questions­Part­2[Analytical functions] Enter your comment.html 16/16 . Comment as:  Manohar Reddy (Google) Sign out   Publish Preview   Notify me Newer Post Home Older Post Subscribe to: Post Comments (Atom) Is this article is useful(Yes/No) Yes    1 (100%) No   0 (0%) Don't Know   0 (0%) Votes so far: 1  Poll closed  Oracle Interview Help Page.