Array
(
)

Select max() em mais de uma coluna

Benedito Batista
|
MVP
    08 dez 2009

Boa Tarde!

Poderiam me ajudar, estou com duvidas no comando MAX(), existe alguma maneira de de conseguir o valor maximo entre os dados de 2 colunas ou mais???

exemplo:

tabela

col1 col2 col3 col4
1      2    3      4
5      6    7      8
9      10  11    12
13    14  15    16

Tipo assim

Select max(col1,col2,col3,col4) as maior
from tabela

O resultado seria maior=16

Jair A.n.
   - 09 dez 2009

Boa Tarde seria ou poderia ser no caso simples:

SELECT CASE WHEN (MAXCOL1 > MAXCOL2) AND (MAXCOL2 > MAXCOL3) AND (MAXCOL3 > MAXCOL4) THEN MAXCOL1
            WHEN (MAXCOL2 > MAXCOL3) AND (MAXCOL3 > MAXCOL4) THEN MAXCOL2
            WHEN (MAXCOL3 > MAXCOL4) THEN MAXCOL3
            ELSE  MAXCOL4 END AS MAXCOL
FROM (SELECT MAX(COL1) AS MAXCOL1
           , MAX(COL2) AS MAXCOL2
           , MAX(COL3) AS MAXCOL3
           , MAX(COL4)AS MAXCOL4
      FROM (SELECT 1 AS COL1 , 2 AS COL2, 3 AS COL3, 4 AS COL4
             UNION
            SELECT 5, 6, 7, 8
             UNION
            SELECT 9, 10, 11, 12
             UNION
            SELECT 13, 14, 15,16
           ) MY_MAX
     ) MY_SUM

é isso?

Benedito Batista
|
MVP
    09 dez 2009

Ola Jair

Essa solução funciona, mas eu queria algo mais generico e enxuto, achei um comando chamado GREATEST(), mas no sql server não funciona...

Preciso desse comando para usar como parte de um sql grande, valew a ajuda, vamos tentando...

Eduardo Belo
   - 09 dez 2009

SELECT MAX(MAIOR_VALOR) AS MAIOR FROM
(
SELECT TABELA.COL1 AS MAIOR_VALOR FROM TABELA
UNION ALL
SELECT TABELA.COL2 FROM TABELA
UNION ALL
SELECT TABELA.COL3 FROM TABELA
UNION ALL
SELECT TABELA.COL4 FROM TABELA
) AS MAIOR   Grande abraço!

Benedito Batista
|
MVP
    09 dez 2009

HUMMMM

Eduardo vou testar essa solução, se atender concluo a chamada, obrigado...

Emerson
   - 18 dez 2009

a performance pode melhorar se houver um índice para cada coluna analisada.
seguindo a resposta dada anteriormente, veja se melhora trazer os valores já consolidados...

SELECT MAX(MAIOR_VALOR) AS MAIOR
FROM
(
  SELECT MAX(COL1) AS MAIOR_VALOR FROM TABELA
  UNION ALL
  SELECT MAX(COL2) FROM TABELA
  UNION ALL
  SELECT MAX(COL3) FROM TABELA
  UNION ALL
  SELECT MAX(COL4) FROM TABELA
  UNION ALL
  SELECT MAX(COL5) FROM TABELA
  [etc...]
) AS MAIOR