Oracle: выберите максимальное значение из разных столбцов одной строки

StackOverflow https://stackoverflow.com/questions/2928102

Вопрос

Весь вопрос в значительной степени в названии. Для каждой строки таблицы я хотел бы выбрать максимум подмножества столбцов.

Например, из этой таблицы

name m1 m2 m3 m4
A    1  2  3  4
B    6  3  4  5
C    1  5  2  1

Результат будет

name max
A    4
B    6
C    5

Запрос должен быть совместимым Oracle 8i.

Это было полезно?

Решение

Учитывая эти тестовые данные ...

SQL> select *
  2  from your_table
  3  /

NAME         M1         M2         M3         M4
---- ---------- ---------- ---------- ----------
A             1          2          3          4
B             6          3          4          5
C             1          5          2          1

SQL>

... Простой большой () вызов даст желаемый результат:

SQL> select name
  2          , greatest(m1,m2,m3,m4)
  3  from your_table
  4  /

NAME GREATEST(M1,M2,M3,M4)
---- ---------------------
A                        4
B                        6
C                        5

SQL>

Другие советы

Использовать GREATEST Но также можно сделать возможным NULLС.

SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max"
FROM yourtable

Вход:

name m1 m2 m3 m4
A    1  2  3  4
B    6  3  4  5
C    1  5  2  1

Выход:

NAME Max
A    4
B    6
C    5

SQL Widdle: http://sqlfiddle.com/#s4/ae268/7/0.

Вход:

name m1 m2   m3 m4
A    1  2    3  null
B    6  null 4  5
C    1  5    2  1

Выход:

NAME Max
A    3
B    6
C    5

SQL Widdle: http://sqlfiddle.com/#9/b1c46/1/0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top