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

In Vertica SQL, how do I order by decimal precision?

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

数据如下所示:

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

这很难精确地做到,因为(大概)数字是一个浮点数。

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

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

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

我要感谢戈登的聪明回答。这是我最终得到的对我有用的东西:

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

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

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

如果您希望数字末尾有一个小数位,您可以将 DESC 添加到 ORDER BY...