从oracle中子查询的有序结果中获取不同的结果

Get distinct result from ordered result of subquery in oracle

我们正在使用 oracle 数据库。我需要排序的结果。所以我创建了一个查询,首先对 id 进行排序,然后我对子查询结果应用查询以获得不同的参数。

查询是:

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

此 return 列表为:

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 排序,在这种情况下,你需要这样的东西:

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

如果您想获得按 ID 排序的不同 para。您可以尝试以下查询:

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)

注意,它按 MIN(id) 排序,因此如果 para 有多个 ID,它将按最小的 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