CHỌN MIN (+ - Cột) làm gì?


7

Tôi đã gặp một truy vấn ngày hôm nay đã làm một cái gì đó tôi chưa từng thấy trước đây. Nó đã làm một cái gì đó như thế này:

SELECT 
    MIN(+ - schema_id) AS [WhatInTheWorld?], 
    MIN(schema_id) AS MinimumID, 
    MAX(+ - schema_id) AS [Uhhh], 
    MAX(schema_id) AS MaxID
FROM sys.objects

Cho kết quả như sau:

WhatInTheWorld? MinimumID    Uhhh       MaxID
-4              1            -1         4

Chính xác thì "+" và "-" đang làm gì?


Nơi mà bạn đã nhìn thấy điều này? có vẻ như nó chỉ trả về một số lược đồ là số âm, nhưng tôi không biết tại sao.
Alen

Nó được sử dụng theo cách mà nó không bao giờ có nghĩa là được sử dụng chắc chắn. Tôi đã thấy nó khi xem xét các truy vấn cũ mà tôi đang viết lại và muốn chắc chắn rằng đó là gì trước khi tôi đưa ra bất kỳ giả định nào. Để đưa ra ý tưởng về truy vấn ban đầu, phút được sử dụng ở mọi nơi vì họ không biết nhóm theo mệnh đề là gì. Chỉ một trong số họ có min (- +) trên đó.
Eric S

Câu trả lời:


11

MIN(+ - schema_id)được phân tích cú pháp MIN( + (- schema_id) )giống như MIN(- schema_id)vậy, vì vậy nó (toán học) * giống như -MAX(schema_id). Tương tự như vậy đối với MAX.


*: Có một số trường hợp cạnh khi MIN/MAX(-x)có thể gây ra lỗi trong khi - MAX/MIN(x)sẽ không (vì phủ định được áp dụng trong tất cả các giá trị của cột so với chỉ giá trị MAX / MIN).


MIN(-x)gần như giống hệt nhau -MAX(x), nhưng có một số trường hợp cạnh khác nhau. Xem sqlfiddle.com/#!18/497cc/5 so với sqlfiddle.com/#!18/497cc/4
Razvan Socol

@RazvanSatio có, có những trường hợp khi một trong hai sẽ phát sinh lỗi, vì phủ định chỉ được áp dụng cho giá trị MIN / MAX chứ không phải tất cả các giá trị của cột.
ypercubeᵀᴹ
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.