2010-11-23 3 views
0
table = emp 

SAL 
------ 
8000 
7000 
6000 
5000 
10000 
9000 
4000 
8000 
7000 

Schreiben Sie für die obige Tabelle eine SELECT-Anweisung, um die größten und zweitgrößten Sals anzuzeigen. Die Ausgabe sollte wie unten sein: -Wie bekomme ich folgende Ausgabe?

  first  second 
     ------- -------- 
      10000  9000 

i folgende Abfrage geschrieben, aber ich habe folgende Ausgabe:

select sal from (select rownum first, sal from(select distinct sal from emp1  order by sal desc))where first <= 2; 

Ausgang:

SAL 
----- 
10000 
9000 
+0

Willkommen ... drücken Sie STRG-K, nachdem Sie Ihren Code ausgewählt haben, um ihn richtig einzurücken. – Benoit

+0

@Benoit --- danke – bunty

Antwort

1

Eine andere Möglichkeit ist die Verwendung der DENSE_RANK-Funktion; auch, wenn Sie die MIN/MAX vermeiden können Sie alle beliebigen N-ten Werte nach Bedarf erhalten:

with q as (
    select sal, dr from (
    select distinct 
      sal 
      ,DENSE_RANK() OVER (ORDER BY sal DESC) dr 
    from emp 
) where dr in (1,2,10) 
) 
select (select sal from q where dr = 1) first 
     ,(select sal from q where dr = 2) second 
     ,(select sal from q where dr = 10) tenth 
from dual; 

Die Abfrage (q) verwirklicht werden sollte, so dass die mehreren Abfragen davon nicht in zusätzliche Durchgänge durch die Daten zur Folge haben sollte.

+0

@jeffrey .......... danke ........ – bunty

1

Wählen Sie dann den minimalen und den maximalen Wert aus Ihre eigene Anfrage, in zwei verschiedene Spalten.

with i 
as  (select sal 
      from (select rownum first 
         , sal 
        from (select distinct sal 
          from scott.emp 
          order by sal desc)) 
      where first <= 2) 
select min (i.sal) 
    , max (i.sal) 
    from i 
group by i.sal;