Вопрос 5: Сортировка данных. Удаление дублирующихся строк в результирующем наборе.
ORDER BY cортирует данные, возвращенные запросом в SQL Server.
Синтаксис
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
Аргументы
order_by_expression Указывает столбец или выражение, по которому производится сортировка результирующего набора запроса. Столбец сортировки может быть указан с помощью имени или псевдонима столбца или неотрицательного целого числа, представляющего позицию столбца в списке выбора. Можно указать несколько столбцов сортировки. Имена столбцов должны быть уникальными. Последовательность столбцов сортировки в предложении ORDER BY определяет организацию упорядоченного результирующего набора. Иными словами, результирующий набор сортируется по первому столбцу, затем упорядоченный список сортируется по второму и т. д. Имена столбцов, на которые содержатся ссылки в предложении ORDER BY, должны однозначно соответствовать столбцу или псевдониму столбца в списке выбора либо столбцу, определенному в таблице, указанной в предложении FROM. Если предложение ORDER BY ссылается на псевдоним столбца в списке выбора, псевдоним должен использоваться отдельно, а не как часть выражения в предложении ORDER BY, например:
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects
ORDER BY SchemaName; -- correct
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects
ORDER BY SchemaName + ''; -- wrong
COLLATE collation_name Указывает, что операция ORDER BY должна выполняться в соответствии с параметрами сортировки, указанными в аргументе collation_name, но не в соответствии с параметрами сортировки столбца, определенными в таблице или представлении. Аргументом collation_name может быть либо имя параметров сортировки Windows, либо имя параметров сортировки SQL. Аргумент COLLATE применяется только к столбцам типа char, varchar, nchar и nvarchar.
ASC | DESC Указывает порядок сортировки значений в указанном столбце — по возрастанию или по убыванию. Значение ASC сортирует от низких значений к высоким. Значение DESC сортирует от высоких значений к низким. Порядок сортировки по умолчанию — ASC. Значения NULL рассматриваются как минимально возможные значения.
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } Указывает число сток, которые необходимо пропустить, прежде чем будет начат возврат строк из выражения запроса. Это значение может быть целочисленной константой или выражением, значение которого больше нуля или равно нулю. offset_row_count_expression может быть переменной, параметром или вложенным запросом, возвращающим скалярную константу. При использовании вложенного запроса он не должен ссылаться на какие-либо столбцы, определенные в области внешнего запроса. Иными словами, он не может коррелировать с внешним запросом. ROW и ROWS являются синонимами и оставлены для совместимости со стандартом ANSI. В плане выполнения запроса значение смещения строки отображается в атрибуте Offset оператора запроса TOP.
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY Указывает число строк, возвращаемых после обработки предложения OFFSET. Это значение может быть целочисленной константой или выражением, значение которого больше единицы или равно единице. fetch_row_count_expression может быть переменной, параметром или вложенным запросом, возвращающим скалярную константу. При использовании вложенного запроса он не должен ссылаться на какие-либо столбцы, определенные в области внешнего запроса. Иными словами, он не может коррелировать с внешним запросом. FIRST и NEXT являются синонимами и предусмотрены для совместимости со стандартом ANSI. ROW и ROWS являются синонимами и оставлены для совместимости со стандартом ANSI. В плане выполнения запроса значение смещения строки отображается в атрибуте Rows или Top оператора запроса TOP.
Столбцы типа ntext, text, image, geography, geometry и xml не могут использоваться в предложении ORDER BY.
Указание целочисленных констант в качестве значений OFFSET и FETCH В следующем примере в качестве значений предложений OFFSET и FETCH указана целочисленная константа. Первый запрос возвращает все строки, отсортированные по столбцу DepartmentID. Сравните результаты, возвращенные этим запросом, с результатами двух следующих запросов. В следующем запросе предложение OFFSET 5 ROWS используется для пропуска первых 5 строк и возврата оставшихся. Конечный запрос содержит предложение OFFSET 0 ROWS, чтобы начать с первой строки, а затем предложение FETCH NEXT 10 ROWS ONLY, ограничивающее число возвращаемых строк до 10 из сортированного результирующего набора.
-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;
-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;
-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID
OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;
DISTINCT - Возвращает все возможные уникальные состояния выбранного столбца модели. Возвращаемые значения зависят от того, какие значения содержит указанный столбец — дискретные, дискретизированные числовые или непрерывные числовые значения.
Синтаксис
SELECT [FLATTENED] DISTINCT [TOP <n>] <expression list> FROM <model>
[WHERE <condition list>][ORDER BY <expression>]
Аргументы
n Необязательный параметр. Целое число, указывающее количество возвращаемых строк.
expression list Список связанных идентификаторов столбцов (производных от модели) или выражений.
model Идентификатор модели.
condition list Условие ограничения значений, возвращаемых из списка столбцов.
expression Необязательный параметр. Выражение, возвращающее скалярное значение.
Результаты инструкции SELECT DISTINCT FROM
Тип столбца | Output |
---|---|
Discrete | Уникальные значения в столбце. |
Дискретизированный | Средняя точка каждого дискретного сегмента памяти в столбце. |
Непрерывный | Средняя точка для значений столбца. |
Пример дискретного столбца
SELECT DISTINCT [Gender]
FROM [TM Decision Tree]
Результат
Gender |
---|
C |
M |
Пример непрерывного столбца Следующий образец кода возвращает средний, минимальный и максимальный возраст для всех значений столбца.
SELECT DISTINCT [Age] AS [Midpoint Age],
RangeMin([Age]) AS [Minimum Age],
RangeMax([Age]) AS [Maximum Age]
FROM [TM Decision Tree]
Результат
Midpoint | Age | Minimum Age Maximum Age |
---|---|---|
62 | 26 | 97 |
Пример дискретизированного столбца
Следующий образец кода возвращает среднее, максимальное и минимальное значения для каждого сегмента, созданного алгоритмом для столбца [Yearly Income]. Чтобы воспроизвести результаты этого примера, потребуется создать новую структуру интеллектуального анализа данных, аналогичную [Targeted Mailing]. В мастере измените тип Yearly Income содержимого столбца с непрерывного на Дискретный.
SELECT DISTINCT [Yearly Income] AS [Bucket Average],
RangeMin([Yearly Income]) AS [Bucket Minimum],
RangeMax([Yearly Income]) AS [Bucket Maximum]
FROM [TM Decision Tree]
Результат
Bucket Average | Bucket Minimum | Bucket Maximum |
---|---|---|
24610.7 | 10000 | 39221.41 |
55115.73 | 39221.41 | 71010.05 |
84821.54 | 71010.05 | 98633.04 |
111633.9 | 98633.04 | 124634.7 |
147317.4 | 124634.7 | 170000 |