Intereting Posts
COPY csv с использованием пользовательского пути имени файла Вычислить угол внешних колец PostGIS (полигоны и мультиполигоны) PostgreSQL: использование вычисленного столбца в том же запросе Сохранять все элементы массива, пока (слева) соединяется с таблицей отображение строк таблицы в виде столбцов на основе некоторого идентификатора Почему setParameter не задает параметр? c # sql, что нужно распоряжаться Найти хранимую процедуру по имени Установите значение NOW () как значение по умолчанию для типа данных datetime? SQL Server MERGE не всегда создает строку для таблицы чтения member_ email_ Не удается подключиться к серверу Sql из-за исключения NullReferenceException Как совместить дату и время с разными столбцами MySQL для сравнения с полной DateTime? разбиение строк в Redshift Извлечение часов из DateTime (SQL Server 2005) Ошибка компиляции отчета ACE с несколькими операторами SELECT INTO

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

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

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

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> 

    … прямой вызов GREATEST () даст желаемый результат:

     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 Fiddle: http://sqlfiddle.com/#!4/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 Fiddle: http://sqlfiddle.com/#!4/b1c46/1/0