Oracle order by 降序并将NULL排在最后

14

我的目标是,按“降序”打印查询结果。但问题在于,带有 NULL 值的行排在列表顶部。如果按降序排序,如何将 NULL 行放在底部?

select mysubcat.subcat
       , mysubcat.subcatid as subcat_id
       , (select SUM(myad.PAGEVIEW) 
           from myad 
            where MYAD.CREATEDDATE between  '01-JUL-13 02.00.49.000000000 PM' and '13-JUL-13 02.00.49.000000000 PM'
            AND MYAD.status = 1 
            and  MYAD.mobileapp IS NULL
            and myad.subcatid = mysubcat.subcatid )as web_views 
from mysubcat 
order by web_views desc;

样本结果如下所示

                             SUBCAT_ID    WEB_VIEWS
Swimming Lessons                56        (null)    
Medical Services                17        (null)
Mobile Phones & Tablets         39        6519
Home Furnishing & Renovation   109        4519

这个排序是降序,我只想将那些空值行放在输出结果的底部,怎么做?

2个回答

31
你可以使用DESC NULLS LAST来实现这一点。
这是Oracle的官方文档:official documentation

NULLS LAST

指定应在非NULL值之后返回NULL值。


2
@sasori - 但是如果你自己阅读了文档,速度会更快。 - APC
@APC,这似乎是“JavaDB”的文档,而不是Oracle数据库的文档。在这种情况下它确实是相同的,但Oracle的实际文档往往是相当晦涩难懂的。PSOUG往往更有帮助,但有时他们也非常冗长。 - jpmc26
@jpmc26 - 自从Dan Morgan停止维护PSOUG以来,它已经逐渐衰落。如果您需要最新的资料,建议使用他的新网站:http://www.morganslibrary.org/library.html - APC
@APC 如果你的客户仍在使用Oracle 10g,那可能不是真的。(他们目前正在升级到11g。) - jpmc26

7

使用case语句

order by case when web_views is not null 
              then 1 
              else 2 
         end asc, 
         web_views desc;

谢谢,我会选择第一个答案作为最佳答案,因为它不需要任何条件语句来实现目标。 - sasori
3
我更喜欢这个版本,因为它可以在更多的数据库中使用。 - Gordon Linoff
你救了我和我的同事一天的命! - Cyrille Pontvieux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接