2017-02-07 33 views
0

Oracleデータベースを使用して作業しています。私はソートされた順序で結果が必要です。だから私は最初にidをソートするクエリを作成した後、別のパラを得るためにサブクエリの結果に対してクエリを適用しました。oracleのサブクエリの順序付き結果と異なる結果を取得

クエリは次のとおりです。

select distinct(para) 
from (
    select para, id 
    from book 
    where title='2' 
     and chapter_id='2' 
     and subchap='1' 
     and para is not null 
    order by id) 
order by para 

この戻りリストとして:

a 
aa 
aaa 
bb 
c 
d 
dd 

しかし、私はこのリストをしたい:私は明確なパラリストのリストが欲しい

a 
c 
d 
aa 
bb 
dd 
aaa 

? Oracleの問合せを使用してこれを実現するにはどうすればよいですか?

select distinct(para) from 
    (select para, id from book where title='2' and chapter_id='2' and subchap='1' and para is not null) 
    order by length(para), para 

をそれとも、この場合には、あなたはこのようなものを必要とする、idでソートしたい:

答えて

1

paraをIDで注文する場合は、 paraは、それが最小のものでソートされます複数のIDを持っているならば、それはとてもMIN(id)にソートすることを

SELECT para 
FROM book 
WHERE title='2' 
    and chapter_id='2' 
    and subchap='1' 
    and para is not null 
GROUP BY para 
ORDER BY MIN(id) 

お知らせ:あなたは、次のクエリを試すことができます。

para, id組み合わせがユニークである場合は、両方のフィールドでグループ化することができます:

SELECT para 
FROM book 
WHERE title='2' 
    and chapter_id='2' 
    and subchap='1' 
    and para is not null 
GROUP BY para, id 
ORDER BY id 
+0

を返信していただきありがとうございます。 MIN(id)クエリは私の場合は正常に動作しますが、私は複数のIDを持つことができますが、私は別個のパラのみを必要とします。 –

1

は多分ちょうど第一の長さで注文したい(少なくとも、このアプローチはあなたの例に一致する)

select para from 
    (select para, min(id) as minid from book where title='2' and chapter_id='2' and subchap='1' and para is not null group by para) 
    order by minid 
関連する問題