2011-09-30 20 views
8

Có cái gì đó nhưTrong SQL, đang có không tổng hợp min/khai thác tối đa

select max(val,0) 
from table 

Tôi không tìm kiếm để tìm giá trị lớn nhất của toàn bộ bảng

Cần phải có một dễ dàng hơn cách này đúng không?

select case when val > 0 then val else 0 end 
from table 

EDIT: Tôi đang sử dụng Microsoft SQL Server

+0

gì thực hiện SQL? – JNK

+0

Ở Fortran, MAX (a, b, ...) đã làm những gì bạn muốn. Trong SQL, một số phương ngữ hỗ trợ các chức năng như 'LARGER' hoặc' SMALLER' hoặc 'LARGEST' hoặc' SMALLEST'. Không có chức năng chuẩn cho nhiệm vụ AFAIK. –

+0

Hãy coi chừng NULL đáng sợ. Bạn có cần: 'CASE WHEN val IS NULL THEN 0 WHEN val> 0 THEN val ELSE 0 END' (đối với trường hợp 0 ​​được biết là không null), hoặc' CASE WHEN VAL1 IS NULL THEN val2 WHEN val2 IS NULL THEN val1 WHEN val1> val2 THÌ val1 ELSE val2 END' cho 'MAX (val1, val2)'. –

Trả lời

9

Chức năng GREATESTLEAST không chuẩn SQL nhưng trong nhiều RDBMS (ví dụ, PostgreSQL). Vì vậy,

SELECT GREATEST(val, 0) FROM mytable; 
+0

Cảm ơn, đã bỏ phiếu. Tôi đang chạy Microsoft SQL Server. Vì vậy, có vẻ như những người không tồn tại :(. – Colin

1

Không có trong SQL mỗi se. Nhưng nhiều công cụ cơ sở dữ liệu định nghĩa một tập hợp các hàm bạn có thể sử dụng trong các câu lệnh SQL. Thật không may, họ thường sử dụng tên và danh sách đối số khác nhau.

Trong MySQL, hàm này là TUYỆT VỜI. Trong SQLite, nó là MAX (nó hoạt động khác nhau với một tham số hoặc nhiều hơn).

-3

Những gì bạn có trong SQL thậm chí không phải là SQL hợp lệ. Đó không phải là cách MAX hoạt động trong SQL. Trong T-SQL, MAX tổng hợp trên một phạm vi trả lại giá trị lớn nhất. Những gì bạn muốn chỉ đơn giản là giá trị lớn hơn của hai.

đọc này cho biết thêm:

Is there a Max function in SQL Server that takes two values like Math.Max in .NET?

0

Làm cho nó một bộ dựa THAM GIA?

SELECT 
    max(val) 
FROM 
(
select val 
from table 
UNION ALL 
select 0 
) foo 

Điều này tránh một udf vô hướng gợi ý trong câu hỏi khác có thể phù hợp hơn với

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