在Vertica SQL中,如何按小数精度排序?

时间:2017-01-27 00:24:48

标签: sql vertica

我有一个包含两种数字的列。一个舍入到一个小数位,另一个不舍入,因此具有非常高的小数精度。我想按这些类型排序以分离数据。

数据如下所示:

column
------
12.8255089150483
12.8922181755615
12179.7
13.2379805518594
14612.2
15.3011111458778

我希望它看起来像这样:

column
------
12179.7
14612.2
12.8255089150483
12.8922181755615
13.2379805518594
15.3011111458778

3 个答案:

答案 0 :(得分:0)

这很难准确,因为(大概)数字是浮点数。

对于您的示例,以下内容应该有效:

order by (case when cast(col as decimal(20, 1)) = cast(col as decimal(20, 10)
               then 1 else 2
          end)

这会将数字转换为定点格式,一个带有一个小数位,一个带有10.如果它们相同,那么我们将它们放在排序顺序中。

答案 1 :(得分:0)

我要感谢戈登的聪明回答。以下是我最终为我工作的内容:

select rtp::varchar as rtp2
from table
order by (
    case when split_part(ifnull(rtp,0)::varchar,'.',2) = ''
    then 0 
    else split_part(ifnull(rtp,0)::varchar,'.',2)::int
    end) desc
limit 100
;

正如您所看到的,我还需要处理一些空值。

我从这里得到了一个暗示: SQL select order by decimal precision desc

答案 2 :(得分:0)

我看到我们已经有两个很好的答案。增加第三种可能性:

select rtp from t1 order by ( 10*rtp - floor(rtp*10) ) ;

如果你想在末尾有一个小数位数的数字,你可以将DESC添加到ORDER BY ...