2013-03-01 22 views
13

得到MAX我有表:三列 - 与SQL

评级:

id | one | two | three 
1 | 12 | 3 | 7 
2 | 11 | 30 | 3 
3 | 8 | 14 | 4 

我怎样才能与SQL MAX从这些领域(一,二,三)值?对于这个例子,这是。

回答

21

在MySQL中,你可以使用GREATEST功能:

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

Example on SQL Fiddle

+1

新的给我...酷 – DRapp 2013-03-01 11:59:27

+4

+1,最伟大的答案:) – RIKI 2013-03-01 12:00:19

+1

的“最大“的功能也存在于Oracle中,所以这个解决方案也适用于Oracle。 – rgettman 2013-03-01 18:41:36

3

可以UNPIVOT类似这样的数据:

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 

SQL Fiddle with Demo

或者你可以用这样的:

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 

SQL Fiddle with Demo

3

尝试此查询

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最简单的标准SQL解决方案。 – l0b0 2013-03-01 14:53:24

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

+1最有效的答案。 – 2013-09-02 13:37:14

1

您可以使用case声明

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