2017-01-27 1 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, если вы хотите число с одним десятичным местом в конце ...

 Смежные вопросы

  • Нет связанных вопросов^_^