SQL SERVER – понимание того, как работает MIN (текст)

Вопрос:Я немного разбираюсь и искал объяснение того, как SQL-сервер оценивает MIN(Varchar). Я нашел это замечание в BOL: MIN находит самое низкое значение в последовательности сортировки, определенной в базовой базе данных Итак, если у меня есть таблица с одной строкой со следующими значениями: Data AA AB AC Выполнение SELECT MIN(DATA) вернет обратно AA. Я просто хочу

Вопрос:

Я немного разбираюсь и искал объяснение того, как SQL-сервер оценивает MIN(Varchar).

Я нашел это замечание в BOL: MIN находит самое низкое значение в последовательности сортировки, определенной в базовой базе данных

Итак, если у меня есть таблица с одной строкой со следующими значениями:

Data AA AB AC

Выполнение SELECT MIN(DATA) вернет обратно AA. Я просто хочу понять, почему за этим и понять БОЛ немного лучше.

Спасибо!

Лучший ответ:

Он определяется collation (порядок сортировки). Для большинства культур порядок сортировки совпадает с алфавитным порядком в английском алфавите, поэтому:

  • ‘AA’ ‘AB’
  • ‘AA’ ‘AC’
  • ‘AB’ ‘AC’

Поэтому “AA” – минимальное значение. Для других культур это может не иметь места. Например, датская сортировка вернет “AB” как минимум, потому что “AA” > “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’); Ответ №1

Нет, MIN используется в инструкции SELECT, которая сканирует более одной строки. Он принимает столбец в качестве аргумента и возвращает “самое низкое” значение (опять же, в соответствии с последовательностью сортировки), найденной в этом столбце.

Используется без предложения GROUP BY, результирующий набор будет иметь одну строку, а значение MIN будет самым низким значением, найденным в этом столбце. Используется с предложением GROUP BY, набор результатов будет иметь одну строку для каждой группы, а значение MIN будет самым низким значением в этом столбце для любой строки в группе.

Ответ №2

min (x), где – тип char (string) – char(), varchar(), nchar(), nvarchar(), находит самое низкое значение в группе на основе строки SQL правила сравнения:

  • Если две строки различаются по длине, то более короткие заполняются символами SP (пробелы) до длины дольше.
  • сравнение продолжается слева направо, символ по символу в соответствии с правилом используемой последовательности сортировки.
  • в сравнении, значение NULL сравнивается ниже любых ненулевых значений (стандарт ISO/ANSI SQL говорит, что это выбор реализации в отношении того, имеет ли NULL меньшее или большее значение, чем любое ненулевое значение).

Итак, если у вас есть таблица

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() или курс, дает вам обратное, упорядочивая набор в нисходящей последовательности и выбирая первое значение.

Оцените статью
Добавить комментарий