2013-03-01 28 views
13

Tôi có bảng:Ba cột - nhận MAX với SQL

Đánh giá:

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

Làm thế nào tôi có thể nhận được với SQL MAX đánh giá cao từ các lĩnh vực này (một, hai, ba)? Đối với ví dụ này, đây là .

Trả lời

21

Trong MySQL bạn có thể sử dụng GREATEST Chức năng:

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

Example on SQL Fiddle

+1

mới một với tôi ... Cool – DRapp

+4

+1, câu trả lời LỚN NHẤT :) – RIKI

+1

Các " chức năng "vĩ đại nhất" cũng tồn tại trong Oracle, vì vậy giải pháp này cũng làm việc cho Oracle. – rgettman

3

Bạn có thể UNPIVOT dữ liệu tương tự như sau:

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 

Xem SQL Fiddle with Demo.

Hoặc bạn có thể sử dụng một cái gì đó như thế này:

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 

Xem SQL Fiddle with Demo

3

Hãy thử truy vấn này

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 Giải pháp SQL tiêu chuẩn đơn giản nhất. – l0b0

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

+1 Câu trả lời hiệu quả nhất. –

1

Bạn có thể sử dụng case tuyên bố

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 
Các vấn đề liên quan