2010-11-23 7 views
0
table = emp 

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

上記の表には、最大と2番目に大きなSalsを表示するSELECT文を記述します。あなたの出力は以下のようにする必要があります: - 出力次どのように出力を得ることができますか?

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

iは以下のクエリを書いたが、私は得た:

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

出力:

SAL 
----- 
10000 
9000 
+0

ようこそ...コードを適切にインデントするように選択したら、CTRL-Kを押してください。 – Benoit

+0

@Benoit --- thanx – bunty

答えて

1

もう1つの方法は、DENSE_RANK関数を使用することです。また、あなたはMIN/MAXを避ける場合は、必要に応じあなたが任意のN番目の値を取得することができます:

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; 

クエリ(Q)は、複数のクエリがデータによって、余分なパスになってはならないので、マテリアライズされなければなりません。

+0

@jeffrey .......... thanx ........ – bunty

1

が次に最小と最大値からを選択あなた自身の要求を2つの異なる列に変換します。

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; 
関連する問題