我有一个包含两种数字的列。一个舍入到一个小数位,另一个不舍入,因此具有非常高的小数精度。我想按这些类型排序以分离数据。
数据如下所示:
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
答案 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 ...