2013-03-01 12 views

Odpowiedz

21

W MySQL można użyć GREATEST Funkcja:

SELECT MAX(GREATEST(one, two, three)) 
FROM T; 

Example on SQL Fiddle

+1

New mi jedno ... super – DRapp

+4

+1, największego odpowiedź :) – RIKI

+1

The " Największa "funkcja istnieje również w Oracle, więc to rozwiązanie działa również dla Oracle. – rgettman

3

Można UNPIVOT dane podobne do tego:

select max(value) 
from 
(
    select id, 'one' col, one value 
    from yourtable 
    union all 
    select id, 'two' col, two value 
    from yourtable 
    union all 
    select id, 'three' col, three value 
    from yourtable 
) src 

Zobacz SQL Fiddle with Demo.

Lub można użyć coś takiego:

SELECT max(data) 
FROM 
(
    SELECT 
    CASE s.col 
     WHEN 'one' THEN one 
     WHEN 'two' THEN two 
     WHEN 'three' THEN three 
    END AS DATA 
    FROM yourtable t 
    CROSS JOIN 
    (
    SELECT 'one' AS col 
    UNION ALL SELECT 'two' 
    UNION ALL SELECT 'three' 
) s 
) s 

Zobacz SQL Fiddle with Demo

3

Spróbuj zapytanie

SELECT tempTable.id, tempTable.max(val) 
FROM (SELECT id, max(one) AS val 
     FROM tbl 
     UNION 
     SELECT id, max(two) AS val 
     FROM tbl 
     UNION 
     SELECT id, max(three) AS val 
     FROM tbl 
) AS tempTable; 
1
select max(if(one > two, if(one > three, one, three), if(two > three, two, three)) 
    from Rating 
6
SELECT MAX(field) FROM (
    SELECT one AS field FROM table 
    UNION 
    SELECT two AS field FROM table 
    UNION 
    SELECT three AS field FROM table 
) AS t 
+0

+1 Najprostsze standardowe rozwiązanie SQL. – l0b0

4
select GREATEST(max(one), max(two), max(three)) as maximum 
from table; 
+0

+1 Najbardziej skuteczna odpowiedź. –

1

Można użyć case oświadczenie

SELECT 
    CASE 
     WHEN one >= two AND one >= three THEN one 
     WHEN two >= one AND two >= three THEN two 
     WHEN three >= one AND three >= two THEN three 
     ELSE one 
    END AS MaxVal