2010-05-28 53 views

Trả lời

53

Với dữ liệu này thử nghiệm ...

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> 

... một LỚN NHẤT() gọi đơn giản sẽ cho kết quả mong muốn:

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> 
+4

+1 Wow! Tôi đã làm việc với Oracle kể từ 7.3.4 là mới, và thậm chí không bao giờ biết rằng chức năng tồn tại. –

+0

@MarkBaker - nó đã được giới thiệu trong Oracle8.0. – APC

+1

Không, nó cũ hơn thế. Nó nằm trong tài liệu hướng dẫn sử dụng Oracle 7.3 –

12

Sử dụng GREATEST mà còn xử lý tốt NULL 's

SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max" 
FROM yourtable 

Nhập:

name m1 m2 m3 m4 
A 1 2 3 4 
B 6 3 4 5 
C 1 5 2 1 

Output:

NAME Max 
A 4 
B 6 
C 5 

SQL Fiddle: http://sqlfiddle.com/#!4/ae268/7/0

Input:

name m1 m2 m3 m4 
A 1 2 3 null 
B 6 null 4 5 
C 1 5 2 1 

Output:

NAME Max 
A 3 
B 6 
C 5 

SQL Fiddle: http://sqlfiddle.com/#!4/b1c46/1/0

Các vấn đề liên quan