Oracle: seleccione el máximo valor de diferentes columnas de la misma fila
-
05-10-2019 - |
Pregunta
Toda la cuestión es más o menos en el título. Para cada fila de la tabla que me gustaría seleccionar el máximo de un subconjunto de columnas.
Por ejemplo, a partir de esta tabla
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
el resultado sería
name max
A 4
B 6
C 5
La consulta debe ser compatible Oracle 8i.
Solución
Teniendo en cuenta estos datos de prueba ...
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>
... un sencillo MAYOR) llamada (dará el resultado deseado:
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>
Otros consejos
Uso GREATEST
sino también manejar posible de NULL
SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max"
FROM yourtable
Entrada:
name m1 m2 m3 m4
A 1 2 3 4
B 6 3 4 5
C 1 5 2 1
Salida:
NAME Max
A 4
B 6
C 5
SQL violín: http://sqlfiddle.com/#!4/ae268/7 / 0
Entrada:
name m1 m2 m3 m4
A 1 2 3 null
B 6 null 4 5
C 1 5 2 1
Salida:
NAME Max
A 3
B 6
C 5
SQL violín: http://sqlfiddle.com/#!4/b1c46/1 / 0
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow