Làm cách nào để tôi có được MIN () của hai trường trong Postgres?


140

Hãy nói rằng tôi có một bảng như thế này:

name | score_a | score_b
-----+---------+--------
 Joe |   100   |   24
 Sam |    96   |  438
 Bob |    76   |  101
 ... |   ...   |  ...

Tôi muốn chọn tối thiểu điểm_a và điểm_b. Nói cách khác, một cái gì đó như:

SELECT name, MIN(score_a, score_b)
FROM table

Tất nhiên, kết quả sẽ là:

name | min
-----+-----
 Joe |  24
 Sam |  96
 Bob |  76
 ... | ...

Tuy nhiên, khi tôi thử điều này trong Postgres, tôi nhận được, "Không có hàm nào khớp với tên và loại đối số đã cho. Bạn có thể cần thêm các kiểu phôi rõ ràng." MAX () và MIN () dường như hoạt động trên các hàng thay vì cột.

Có thể làm những gì tôi đang cố gắng?

Câu trả lời:


246

MỚI NHẤT (a, b):

Hàm GREATESTLEASThàm chọn giá trị lớn nhất hoặc nhỏ nhất từ ​​danh sách bất kỳ số biểu thức nào. Tất cả các biểu thức phải được chuyển đổi thành một loại dữ liệu chung, đây sẽ là loại kết quả (xem Phần 10.5 để biết chi tiết). Giá trị NULL trong danh sách bị bỏ qua. Kết quả sẽ chỉ là NULL nếu tất cả các biểu thức ước tính thành NULL.

Lưu ý rằng GREATESTLEASTkhông có trong tiêu chuẩn SQL, nhưng là một phần mở rộng phổ biến. Một số cơ sở dữ liệu khác làm cho chúng trả về NULL nếu bất kỳ đối số nào là NULL, thay vì chỉ khi tất cả là NULL ...


20
Đối với những người như tôi, những người cũng sẽ cần MAX()hai giá trị, đó là GREATEST(a, b):)
vektor 17/03/2015


-16

Bạn có thể nhận được câu trả lời bằng cách đặt dữ liệu đó vào một cột như thế này:

SELECT name, MIN(score_a, score_b) as minimum_score
FROM table

Ở đây, chúng tôi sẽ đặt giá trị tối thiểu giữa score_ascore_bvà in giống nhau bằng cách lưu trữ giá trị đó trong một cột có tên minimum_score.


chỉ min(expression)tồn tại Định nghĩa từ doc: giá trị tối thiểu của biểu thức trên tất cả các giá trị đầu vào với` biểu thức` là bất kỳ số, chuỗi, ngày / thời gian, mạng hoặc loại enum hoặc mảng của các loại này
charlesdg
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.