SQLサーバーがMIN(Varchar)
を評価する方法について、少し掘り下げて説明を探しています。
私はこの発言をBOLで見つけました:MINは、基礎となるデータベースで定義されている照合シーケンスで最も低い値を見つけます
したがって、次の値を持つ1つの行を持つテーブルがあるとします。
_Data
AA
AB
AC
_
SELECT MIN(DATA)
を実行すると、AAが返されます。この理由を理解し、BOLをもう少しよく理解したいだけです。
ありがとう!
collation (ソート順)によって決定されます。ほとんどの文化では、照合順序は英語のアルファベットのアルファベット順と同じです。
したがって、「AA」が最小値です。他の文化ではこれは成り立たないかもしれません。たとえば、デンマークの照合では、 'AA'> 'AB'であるため、最小値として 'AB'が返されます。これは、「AA」がデンマーク語のアルファベットの最後の文字である「Å」と同等に扱われるためです。
SELECT MIN(s COLLATE Danish_Norwegian_CI_AS)FROM table1; min_s AB
「通常の」ソート順を取得するには、Latin1_General_Bin
照合順序を使用します。
SELECT MIN(s COLLATE Latin1_General_Bin)FROM table1; min_s AA
この結果を再現するには、次のテストテーブルを作成します。
CREATE TABLE table1(s varchar(100)); INSERT INTO table1(s)VALUES( 'AA')、( 'AB')、( 'AC');
いいえ、MINは複数の行をスキャンするSELECTステートメントで使用されています。引数として列を受け取り、その列で見つかった(照合順序に従って)「最低」の値を返します。
GROUP BY句なしで使用すると、結果セットには単一の行が含まれ、MINの値はその列で見つかった最小値になります。 GROUP BY句とともに使用すると、結果セットにはグループごとに1つの行があり、MINの値はグループ内の任意の行のその列の最小値になります。
char(string)タイプのchar()、varchar()、nchar()、nvarchar()であるmin(x)は、SQLの文字列比較ルールに基づいて、グループ内の最小値を検索します。
だから、あなたがテーブルを持っているなら
create table foo
(
myString varchar(16) not null ,
)
次にクエリを実行します
select min(myString) from foo
実行した場合と同じ結果セットが得られます
set rowcount 1
select myString
from foo
order by myString
set rowcount 0
基本的には、セットを昇順に並べ、最初の値を選択します。 MAX()(コース)は逆を与え、セットを降順で並べ、最初の値を選択します。