find the nth highest salary

Hi guys, I'll try to find the nth highest salary

using the sub query, is there a case in which the following query may fail

Select

* de (

Select

distinct rownum rn,salary from emp_mgr order by rownum) t where t. rn = 3

;

I do something like that, but he got 3 selects, so I'm a worried buit, trying to optimize it

Select * from)

Select rownum rn, t t.salary (salary select distinct from emp_mgr by salary desc)

) rs

where rs.rn = &n;

Tags: Database

Similar Questions

  • Query to find the nth highest salary...

    Hi guys,.

    I can't understand this query that we got a Web site. It is used to find the nth highest salary of the employee... Can someone explain to me please each and every part of it...

    The Charly is:

    Select distinct (a.salary)
    EMP a
    where 1 = (select count (distinct (salary))
    b emp
    where a.salary < = b.salary)

    The "BOLD" part which is the return value... is my main question about this query...

    Help, please

    It is called a correlated sub query. The inner query is executed for each iteration of the outer query. For example, if the table emp has 14 rows and then for each salary 14 the inner query will run.
    The part

    select count(distinct(sal))
    from emp b
    where a.sal<=b.sal
    

    actually counts the number of treatments that are less than or equal to the treatment of the outer query.
    Clearly for the King, who gets the highest salary is greater than or equal to 1 (himself). It returns the highest salary.

    SQL> select *
      2  from emp a
      3  where 1 >= (select count(distinct(sal))
      4  from emp b
      5  where a.sal<=b.sal)
      6  order by sal desc;
    
         EMPNO ENAME                               JOB              MGR HIREDATE         SAL       COMM     DEPTNO
    ---------- ----------------------------------- --------- ---------- --------- ---------- ---------- ----------
          7839 KING                                PRESIDENT            17-NOV-81       5000                    10
    

    Salary of the first two.

    SQL> ed
    Wrote file afiedt.buf
    
      1  select *
      2  from emp a
      3  where 2 >= (select count(distinct(sal))
      4  from emp b
      5  where a.sal<=b.sal)
      6* order by sal desc
    SQL> /
    
         EMPNO ENAME                               JOB              MGR HIREDATE         SAL       COMM     DEPTNO
    ---------- ----------------------------------- --------- ---------- --------- ---------- ---------- ----------
          7839 KING                                PRESIDENT            17-NOV-81       5000                    10
          7902 FORD                                ANALYST         7566 03-DEC-81       3000                    20
          7788 SCOTT                               ANALYST         7566 09-DEC-82       3000                    20
    
  • To find the nth higher/lower value in a table

    Hi all

    I have a question

    in the table a1(empid,sal) are the 2 columns

    EmpID sal

    100-5000

    105 7500

    110 3500

    087 11136

    14336 95

    I didn't want to write the query that will give me the 3rd highest salary. or generalized to find the nth more eleve/nieme the lowest value of the table.

    Note:-Rownum and Rowid must not be used

    Thank you

    Hello

    You can use a generic result of queries to find nth highest salary...

    Just put the value of N in the query, you will get the answer...

    Query:

    SELECT E1. Salary OF EMP E1 WHERE (N) = (SELECT COUNT (DISTINCT E2. Salary) OF EMP E2 WHERE E2. Salary > = E1. Salary);

    hope you got the answer...

    Check if it really helps...

    thanxx...

  • to find the lowest a salary table

    Hello guys,.
    I need to find the salary low table. What is the easy way to do it.

    How do you manage the links?

    If you want several rows returned when there are several people with the same salary

    SELECT *
      FROM(
        SELECT a.*,
               rank() over (order by salary desc ) rnk
          FROM your_table a)
     WHERE rnk = 1
    

    If you want to handle differently the links, use a different analytic function. No doubt dense_rank or row_number.

    Justin

  • query to retrieve the second highest salary managers

    Select * from employee where salary = (select max (salary) in e employees where employee_id = e.manager_id and salary < (select max (salary) in employees))
    /

    It does not run... can someone suggest a new

    987184 wrote:
    our teacher was asked to write without y analytical function.dats.

    1 list of Manager IDs:

    select  manager_id
      from  hr.employees
      where manager_id is not null
    /
    

    2 manager info:

    select  employee_id,
            first_name,
            last_name,
            salary
      from  hr.employees
      where employee_id in (
                            select  manager_id
                              from  hr.employees
                              where manager_id is not null
                           )
    /
    

    3. Manager second highest salary

    with managers as (
                      select  employee_id,
                              first_name,
                              last_name,
                              salary
                        from  hr.employees
                        where employee_id in (
                                              select  manager_id
                                                from  hr.employees
                                                where manager_id is not null
                                             )
                     )
    select  m1.employee_id,
            m1.first_name,
            m1.last_name,
            max(m1.salary) second_highest_salary
      from  managers m1,
            managers m2
      where m1.salary < m2.salary
      group by m1.employee_id,
               m1.first_name,
               m1.last_name
      having count(distinct m2.salary) = 1
    /
    

    And execution:

    SQL> select  employee_id,
      2          first_name,
      3          last_name,
      4          salary
      5    from  hr.employees
      6    where employee_id in (
      7                          select  manager_id
      8                            from  hr.employees
      9                            where manager_id is not null
     10                         )
     11    order by salary desc
     12  /
    
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                     SALARY
    ----------- -------------------- ------------------------- ----------
            100 Steven               King                           24000
            102 Lex                  De Haan                        17000
            101 Neena                Kochhar                        17000
            145 John                 Russell                        14000
            146 Karen                Partners                       13500
            201 Michael              Hartstein                      13000
            108 Nancy                Greenberg                      12008
            205 Shelley              Higgins                        12008
            147 Alberto              Errazuriz                      12000
            114 Den                  Raphaely                       11000
            148 Gerald               Cambrault                      11000
    
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                     SALARY
    ----------- -------------------- ------------------------- ----------
            149 Eleni                Zlotkey                        10500
            103 Alexander            Hunold                          9000
            121 Adam                 Fripp                           8200
            120 Matthew              Weiss                           8000
            122 Payam                Kaufling                        7900
            123 Shanta               Vollman                         6500
            124 Kevin                Mourgos                         5800
    
    18 rows selected.
    
    SQL> with managers as (
      2                    select  employee_id,
      3                            first_name,
      4                            last_name,
      5                            salary
      6                      from  hr.employees
      7                      where employee_id in (
      8                                            select  manager_id
      9                                              from  hr.employees
     10                                              where manager_id is not null
     11                                           )
     12                   )
     13  select  m1.employee_id,
     14          m1.first_name,
     15          m1.last_name,
     16          max(m1.salary) second_highest_salary
     17    from  managers m1,
     18          managers m2
     19    where m1.salary < m2.salary
     20    group by m1.employee_id,
     21             m1.first_name,
     22             m1.last_name
     23    having count(distinct m2.salary) = 1
     24  /
    
    EMPLOYEE_ID FIRST_NAME           LAST_NAME                 SECOND_HIGHEST_SALARY
    ----------- -------------------- ------------------------- ---------------------
            101 Neena                Kochhar                                   17000
            102 Lex                  De Haan                                   17000
    
    SQL> 
    

    As you can see, most high salary 24000 is won by the King. Second highest salary is 17000 and is won by two managers: Kochhar and De Haan.

    SY.

  • 2nd and 5th highest salary

    Hi, I'm kind of new to sql. I have a table with the name of the employee and salary.
    I would like to find the name of the 2nd higher salary? also I want to get the name of the highest salary 5th
    Here's my data

    INSERT INTO er4 VALUES ('John', 1000, 123);
    INSERT INTO er4 VALUES ('john2', 3000, 234);
    INSERT INTO er4 VALUES ('Jean3', 1000, 223);
    INSERT INTO er4 VALUES ('john4', 4000, 123);
    INSERT INTO er4 VALUES ('john5', 8000, 023);
    INSERT INTO er4 VALUES ('john6', 9000, 023);
    INSERT INTO er4 VALUES ('john7', 8000, 723);

    You can see in the data, there are two employees with the second highest salary. I would like to get one or the other, but I want my query to return a single line

    can someone help me write a query to get the name and salary of the 2nd higher and the name and salary of 5th higher

    Hello

    Part of learning about the functions is to learn what they are good for, and what they are not good for.
    As Justin said, MAX is not good for this task.
    If you were interested in just the 1st highest salary, you may be able to use MAX like this:

    SELECT  *
    FROM    er4
    WHERE   salary  =      (
                   SELECT     MAX (salary)
                   FROM     er4
                   )
    AND     ROWNUM     = 1     -- in case of a tie, pick one row arbitrarily
    ;
    

    But even if the goal was to find the highest salary, I would use ROW_NUMBER, as Justin did.
    Why? The following scenario happens all the time in real life. The client for which you wrote this comes back in 3 months and said: 'this query you wrote for the highest salary works very well! We found it so useful, we would like to do something similar to find the 2nd highest salary, either the 5th highest, or the top 5 or the next 5. "ROW_NUMBER is flexible enough to do all these things. When you have to solve a problem, you'll save time (long-term) If you can predict, or just guessing, what you need to solve later and write something for the problem today that can easily be adapted for potential future similar problems problems.

  • Calculation of the nth value highest in a group

    Hi all

    I was following the problem to be solved. I have a table with the following structure:
    Table emp
    EmpID number
    NAme varchar2
    DeptID number
    Salary number
    Now, to find the maximum salary in each Department, I can use:
    select DeptId,max(salary) from emp group by DeptId;
    Now to find the second salary max, I can do below:
    select DeptId,max(salary) from emp
    where (DeptId,salary) not in (select DeptId,max(salary) salary from emp group by DeptId) group by DeptId;
    But suppose I need to find the 5th or 6th salary max then this method will be heavy.
    I need a SQL query in which I can dynamically pass the parameter to calculate.

    Kindly help.

    Calculation of the nth value highest in a group

    In recent db versions nth_value seems to be the game.

  • find the highest amplitude of a signal

    I have to find the value of the highest amplitude of my signal. This should be done automatically without using cursors

    What is the data type of your signal (Dynamics, wave form, table, etc.).

    For example, try:

    Table & Min Max

    Waveform Max & Min

    Statistics VI express

  • Function to find the name of the nth month [V 10 g]

    Hi Experts,

    Please, help me find the name of Nth last month [months].

    Simply use a variable?

    SQL > n number of var
    SQL > exec: n: = 3

    PL/SQL procedure successfully completed.

    SQL > select to_char (add_months (sysdate,: n), 'Month') twice;

    TO_CHAR (ADD_MONTHS (SYSDATE,: N), 'MOUNT)
    ------------------------------------
    December

    1 selected line.

    SQL > exec: n: = - 1

    PL/SQL procedure successfully completed.

    SQL > select to_char (add_months (sysdate,: n), 'Month') twice;

    TO_CHAR (ADD_MONTHS (SYSDATE,: N), 'MOUNT)
    ------------------------------------
    August

    1 selected line.

    SQL > exec: n: = 1658

    PL/SQL procedure successfully completed.

    SQL > select to_char (add_months (sysdate,: n), 'Month') twice;

    TO_CHAR (ADD_MONTHS (SYSDATE,: N), 'MOUNT)
    ------------------------------------
    November

    1 selected line.

  • Query to find the coordinates of employee salary

    Hello

    Could someone help write the query to find the salary of the employee details.

    Thanks in advance.

    This should help you get started:

    SELECT papf.full_name
    papf.email_address
    ppp.proposed_salary_n salary
    OF per_pay_proposals ppp
    per_all_assignments_f ADP
    per_all_people_f women's wear
    WHERE ppp.assignment_id = paaf.assignment_id
    AND paaf.assignment_type = 'E '.
    AND paaf.primary_flag = 'Y '.
    AND paaf.person_id = papf.person_id
    AND nvl (papf.current_employee_flag, 'n') = 'Y '.
    AND trunc (sysdate) BETWEEN
    PPP.change_date AND ppp.date_to
    AND trunc (sysdate) BETWEEN
    PAAF.effective_start_date AND paaf.effective_end_date
    AND trunc (sysdate) BETWEEN
    PAPF.effective_start_date AND papf.effective_end_date;

  • How can I get the second and third highest salary from the emp table

    How can I get the second and third highest salary from the emp table in the ecah Department
    SQL> ed
    Wrote file afiedt.buf
    
      1  select empno, ename, sal, deptno
      2  from (
      3    select empno, ename, sal, deptno, dense_rank() over (partition by deptno order by sal desc) as rn
      4    from emp
      5    )
      6* where rn in (2,3)
    SQL> /
    
         EMPNO ENAME             SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7782 CLARK            2450         10
          7934 MILLER           1300         10
          7566 JONES            2975         20
          7876 ADAMS            1100         20
          7499 ALLEN            1600         30
          7844 TURNER           1500         30
    
    6 rows selected.
    
    SQL>
    
  • find the highest in equal to the data

    Hello
    I need to find the top tied at the rank of gvien to the sort order for each grade is also given
    could you please help me in the present.
    with t1 as 
    (select 'AB' t1_cd , 'A+' t1_rk from dual union all
    select 'BC','BBB-' from dual union all
    select 'CD','B-' from dual union all
    select 'DE','AA' from dual union all
    select 'EF','BB+' from dual),
     t2 as
     ( select 'AB' t2_cd ,'A+' t2_rk, 1 ordr FROM DUAL union all
       select 'AB' , 'A'  ,1 FROM DUAL UNION ALL
       select 'AE' ,'BBB-',3 from dual union all
       select 'BC' ,'BBB-',4 from dual union all
       select 'CD' ,'B-'  ,5 from dual union all
       select 'DE' ,'AA'  ,2 from dual union all
       select 'EF' ,'BB+' ,6 from dual )
    SELECT * FROM T1,T2
    WHERE t1.t1_cd= t2.t2_cd   -- I need to find the  code and rank which have rank greater than equal to BBB-   
    Here, in the above query, I need to find records that have classifications > = 'BBB-' sort order is alos in the ordr T2 table column

    Output expected
    T1_CD     T1_RK     ORDR                            final_Rk
    
    AB     A+     1  < BBB- i.e;4 so output  L
    AB     A+     1  < BBB- i.e;4 so output  L
    BC     BBB-     4  = BBB- i.e;4 so output  E
    CD     B-     5  > BBB- i.e;4 so output  H
    DE     AA     2  < BBB- i.e;4 so output  L
    EF     BB+     6  > BBB- i.e;4 so output  H
    Thank you

    Published by: Smile on May 8, 2012 07:36
    with t1 as
    (select 'AB' t1_cd , 'A+' t1_rk from dual union all
    select 'BC','BBB-' from dual union all
    select 'CD','B-' from dual union all
    select 'DE','AA' from dual union all
    select 'EF','BB+' from dual),
     t2 as
     ( select 'AB' t2_cd ,'A+' t2_rk, 1 ordr FROM DUAL union all
       select 'AB' , 'A'  ,1 FROM DUAL UNION ALL
       select 'AE' ,'BBB-',3 from dual union all
       select 'BC' ,'BBB-',4 from dual union all
       select 'CD' ,'B-'  ,5 from dual union all
       select 'DE' ,'AA'  ,2 from dual union all
       select 'EF' ,'BB+' ,6 from dual )
    SELECT t1.*, t2.*,
                case when t2.ordr > t3.ordr then 'H'
                       when t2.ordr = t3.ordr then 'E'
                       when t2.ordr < t3.ordr then 'L'
                end code
    FROM T1,T2, (select max(ordr) ordr from t2 where t2_rk = 'BBB-') t3
    WHERE t1.t1_cd= t2.t2_cd;
    
    T1_CD T1_RK T2_CD T2_RK       ORDR CODE
    ----- ----- ----- ----- ---------- ----
    AB    A+    AB    A+             1 L
    AB    A+    AB    A              1 L
    BC    BBB-  BC    BBB-           4 E
    CD    B-    CD    B-             5 H
    DE    AA    DE    AA             2 L
    EF    BB+   EF    BB+            6 H   
    
    6 rows selected.
    
  • To find the first Summit for data channel

    Hey guys,.

    I need a little help. I wrote a script to process some data. Basically, what the script does is calculate the linear accelerations peak, peak of the angular speeds, HIC values and IF. But there is a problem with my script that I need help. In my script, I use the ChnPeakFind command to find the pics in my chains. This command works fine to find the peak value, but what I want to do is find the FIRST Summit in the data, without worrying whether or not it is a maximum. I always encountered data that varies in which my first pic (impact analysis) may or may not be the highest point in the channel. As you can see in the Graphs.png that I have attached, the ChnPeakFind command found the 2nd Summit (red circle #2) in my chain of angular velocity (ARS resulting). But what I report is the first peak value (red circle #1). I've also attached a screenshot of the section in my code where I calculate the angular velocity. The 'i' in the calculation is just the channel group number. In this case, it is 1. Anyone know how to change the code or have another suggestion how to find the first Summit in a channel without having to stop and go to the tab analysis to manually find the pic?

    Thank you!

    Hello

    If it please see my littl below escript and let me know if this could work for you

    Dim     oChnResultant
    Call Data.Root.Clear)
    Call DataFileLoad ("E:\Customer_Examples\01_Head_Impact\Head Impact Data.tdm", "CT", "Load")
    Set oChnResultant = data. Root.ActiveChannelGroup.Channels.Add ("Result", DataTypeChnFloat64)
    Call ChnXYZAbsValue ("[1] / ARS X","[1] / ARS Y","[1] / ARS Z", oChnResultant)
    "Use the filter twice to get rid of the jig
    Call ChnSavitzkyGolayFilter (oChnResultant, oChnResultant, 1, 12)
    Call ChnSavitzkyGolayFilter (oChnResultant, oChnResultant, 1, 12)
    ' Delete few maxima to the beginninf of the signal.
    Calculate the call ("R = IIF (R)<>
    'Research for first peak.
    Call ChnPeakFind ("[1] / Time axis","[1]/Resultant","/PeakX","/PeakY",1,"Max.Peaks","Time")

  • How to find the key

    Is there a quick way to find the key of a song or instrumental that has been imported to the logic?

    No, you need a little music for this. I guess you could find it difficult to play with a keyboard and hear/guess the agreements/key?

    Here would be my suggestion for a workaround - if it is an entire song, as you indicate in your question:

    -To get agreements on a Web site

    -See if you can find the original version of keys (that would be easy, right?)

    - Then play these chords along your song imported. If they sound not right, transpose your up and down by steps MIDI track until it sounds right. -> Get your agreements and the key.

    If your song doesn't have agreements to seek, find parts of the song where you lift clear of bass notes (not too much battery), EQ everything, taking Tuner in pop in the track and see if you can pick up the dominant notes. That should lead you to your key of song.

  • Cannot find the library of photos on iMovie sidebar

    I work in iMovie and I can't find the photo library on my sidebar iMovie. How to retrieve

    In the preferences of Photos make sure your library is the library system. It must be indicated as grey. Then open photos before opening iMovie and it should appear.

Maybe you are looking for