Как заказать столбцы по размеру - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть таблица со столбцами длины, ширины и высоты, и я хотел бы упорядочить их так, чтобы у меня была новая таблица с именем great_dim, mid_dim, min_dim или для общих целей, 1st_dim, 2nd_dim и т. Д.

Я знаю, что в красном смещении у нас самые большие и наименьшие функции, но это не позволит мне занять среднюю позицию.Для этого случая, когда я хочу заказать 3 измерения, я мог бы получить наибольшее из трех и наименьшее из трех в подзапросе, а затем получить случай и условия для получения среднего значения, но мне интересно, есть ли более простой / более эффективныйспособ сделать это

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Только для трех значений это не так сложно.У вас есть GREATEST, LEAST, и сумма минус два для другого значения:

select
  greatest(length, width, height) as greatest_dim,
  length + width + height - greatest(length, width, height)
                          - least(length, width, height) as mid_dim,
  least(length, width, height) as min_dim
from mytable;
0 голосов
/ 05 февраля 2019

Это боль.Один из методов - сложные case выражения.Другой способ - разделить строки и повторно объединить:

select pk,
       max(case when seqnum = 1 then dim end) as dim_1,
       max(case when seqnum = 2 then dim end) as dim_2,
       max(case when seqnum = 3 then dim end) as dim_3
from (select pk, row_number() over (order by dim desc) as seqnum
      from (select pk, length as dim from t
            union all
            select pk, width as dim1 from t
            union all
            select pk, height as dim1 from t
           ) t
     ) t
group by pk;

pk - это столбец, который уникально идентифицирует каждую строку (например, первичный ключ).

...