2011-12-19 52 views
5

Tôi có hai câu lệnh chọn tìm mức lương tối đa cho một vai trò cụ thể. Bây giờ tôi muốn có tối đa hai lợi nhuận của các câu lệnh chọn đó. Hãy suy nghĩ về mã sau:Oracle SQL - Tối đa từ hai câu lệnh chọn

SELECT MAX(SALARY) 
    FROM TABLE1 
WHERE ROLE = 'MANAGER' 

SELECT MAX(SALARY) 
    FROM TABLE1 
WHERE ROLE = 'DEVELOPER'; 

Cuối cùng, tôi muốn tối đa hai số này.

Tôi làm cách nào để thực hiện tất cả điều này trong một truy vấn?

Có hai lựa chọn cho số lượng tối đa, sau đó so sánh các giá trị tối đa đó và cho tối đa hai giá trị tối đa?

Trả lời

9

Kể từ khi cả hai Selects đọc từ cùng một bảng, bạn có thể làm điều này:

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER' 
4

Bạn có thể hình dung ra mức lương tối đa và vai trò có mà lương như thế này.

SELECT * FROM 
(
    SELECT MAX(SALARY) MAXSALARY, ROLE 
    FROM TABLE1 
    WHERE ROLE IN ('MANAGER','DEVELOPER') 
    GROUP BY ROLE 
    ORDER BY MAX(SALARY) 
) 
WHERE ROWNUM = 1 
10

Nếu bạn muốn tối đa từ nhiều chức danh hơn, hãy thêm chức danh công việc đó vào mảng "IN". Không cần viết một câu lệnh chọn cho mỗi chức danh.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE IN ('MANAGER','DEVELOPER') 
3

Điều này có thể được giải quyết chỉ bằng một câu lệnh chọn có vai trò khác nhau.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER' 
Các vấn đề liên quan