2017-01-27 29 views
0

我有兩列數字的列。一個四捨五入到小數點後一位,另一個不是四捨五入的,因此具有非常高的小數精度。我想按這些類型進行排序以分離數據。在Vertica SQL中,如何按小數精度排序?

的數據是這樣的:

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

這是很難精確做到,因爲(大概)的數量是浮動點。

對於你的榜樣,下面應該工作:

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

該轉換號碼定點格式,一個帶有一個小數位和一個帶10.如果它們是相同的,那麼我們就把他們先按排序順序排列。

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

0

我看到我們有兩個優秀的答案了。添加第三種可能性:

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

您可以添加DESC在ORDER BY如果你到底想用一個小數位的數字...