Was macht SELECT MIN (+ - Spalte)?

7

Ich bin heute auf eine Abfrage gestoßen, die etwas getan hat, was ich vorher noch nicht gesehen habe. Es hat ungefähr so ​​etwas gemacht:

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

Welches ergibt die folgenden Ergebnisse:

WhatInTheWorld? MinimumID    Uhhh       MaxID
-4              1            -1         4

Was genau machen die "+" und "-"?

Eric S.
quelle
Wo hast du das gesehen? es sieht so aus, als würde es nur einige schema_id's als negative Zahlen zurückgeben, aber ich habe keine Ahnung warum.
Alen
Es wurde so verwendet, dass es niemals sicher verwendet werden sollte. Ich habe es bei der Überprüfung alter Abfragen gesehen, die ich neu geschrieben habe, und wollte sicherstellen, was es war, bevor ich irgendwelche Annahmen getroffen habe. Um eine Vorstellung von der ursprünglichen Abfrage zu bekommen, wurden überall Minuten verwendet, da sie nicht wussten, was eine Group-by-Klausel ist. Nur einer von ihnen hatte die min (- +) drauf.
Eric S

Antworten:

11

MIN(+ - schema_id)wird analysiert als MIN( + (- schema_id) )was das gleiche ist wie MIN(- schema_id), also ist es (mathematisch) * das gleiche wie -MAX(schema_id). Ebenso für den MAX.


*: Es gibt einige MIN/MAX(-x)Randfälle, in denen ein Fehler auftreten kann, während dies - MAX/MIN(x)nicht der Fall ist (da die Negation in allen Werten der Spalte gegenüber nur dem MAX / MIN-Wert angewendet wird).

ypercubeᵀᴹ
quelle
MIN(-x)ist fast identisch mit -MAX(x), aber es gibt einige Randfälle, in denen sie unterschiedlich sind. Siehe sqlfiddle.com/#!18/497cc/5 vs sqlfiddle.com/#!18/497cc/4
Razvan Socol
@RazvanSocol Ja, es gibt Fälle, in denen einer der beiden einen Fehler auslöst, da die Negation nur auf den MIN / MAX-Wert und nicht auf alle Werte der Spalte angewendet wird.
Ypercubeᵀᴹ