2011-06-13 80 views
6

是否可以通过声明为订单中的所有列提供一次方向?您可以为一个订单中的所有列指定一个方向吗?

select * 
from my_table 
order by name desc, type desc 

可以使用 “降序” 一旦你写同样的事情?

也许类似这样? (这不起作用)

select * 
from my_table 
order by (name, type) desc 

回答

4

不是.SQL标准不允许这样做。

话虽如此,可能有一些RDBMS确实支持这样的语法。我只是不知道任何。

7

你可以使用row_number为:

select * 
from my_table 
order by 
     row_number() over (order by name, type) DESC 

最后DESC将反转ROW_NUMBER的顺序。因此,它会将ASC翻转为DESC以获得名称和类型。

+0

这很聪明。 – 2011-06-13 18:34:45

+1

虽然是等价的,但我不相信查询优化器识别棘手问题,只做一种排序,而不是一次排序生成row_number(),然后再次排序输出到另一个方向。我快速浏览了order by row_number()的解释计划(由A,B排序)DESC'verus'order by desc,B desc'确实有一个额外的步骤,即“窗口排序”。 (在Linux上的EE 10.2.0.4.0 64位) – 2011-06-13 19:17:04

+4

我认为键入ORDER BY名称DESC更简单,键入DESC ;-) – DCookie 2011-06-13 19:27:42

相关问题