Làm thế nào để có được tối đa hai giá trị trong MySQL?


289

Tôi đã thử nhưng thất bại:

mysql> select max(1,0);
LRI 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn
tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp sử dụng 
gần '0)' ở dòng 1

Câu trả lời:


527

Sử dụng TUYỆT VỜI ()

Ví dụ:

SELECT GREATEST(2,1);

Lưu ý: Bất cứ khi nào nếu bất kỳ giá trị đơn lẻ nào chứa null tại thời điểm đó, hàm này luôn trả về null (Cảm ơn người dùng @ sanghavi7)


41
một điều cần lưu ý là bất cứ khi nào nếu bất kỳ giá trị đơn lẻ nào chứa null tại thời điểm đó thì hàm này luôn trả về null dưới dạng câu trả lời!
sanghavi7

33
Ngoài ra còn cóLEAST
bobobobo

1
làm cách nào tôi có thể chạy một truy vấn phụ làm tham số để GREATESTtôi có thể nhận các giá trị cho cột cirtain
Junaid Qadir

17
Để ngăn chặn vấn đề với null, bạn có thể sử dụng ifnull. Ví dụ select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;sẽ giúp bạn ngày1.
Christoph Grimmer-Dietrich

1
Nếu một số giá trị có thể là null, bạn có thể làmGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

27

Để có được giá trị tối đa của một cột trên một tập hợp các hàng:

SELECT MAX(column1) FROM table; -- expect one result

Để nhận giá trị tối đa của một tập hợp các cột, bằng chữ hoặc biến cho mỗi hàng:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results

3
Coi chừng giá trị null với GREATEST. Bất kỳ giá trị null nào cũng sẽ khiến hàm trả về null. Để ngăn chặn điều này, bạn có thể làmGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

5

Bạn có thể sử dụng hàm TUYỆT VỜI với các trường không null. Nếu một trong những giá trị này (hoặc cả hai) có thể là NULL, đừng sử dụng nó (kết quả có thể là NULL).

select 
    if(
        fieldA is NULL, 
        if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
        if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
    ) as maxValue

Bạn có thể thay đổi NULL thành giá trị mặc định ưa thích của bạn (nếu cả hai giá trị là NULL).


1
Đây là lý do tại sao tôi thực sự ghét MySQL. Thật là một khối lượng công việc khổng lồ để làm một việc đơn giản như vậy.
Monica Heddneck

9
Điều này có thể được thay thế đơn giản bằng select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Nó quá phức tạp
Kyborek

1
Nếu một số giá trị có thể là null, bạn có thể làmGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.