Sql select distinct statement

СинтаксисSyntax

ПараметрыParameters

expressionexpression(Variant) Выражение, к которому применяется статистическая обработка.(Variant) The expression on which to perform the aggregation.

областьscope(String) необязательно.(String) Optional. Имя набора данных, группы или области данных, содержащих элементы отчета, к которым применяется агрегатная функция.The name of a dataset, group, or data region that contains the report items to which to apply the aggregate function. Если аргумент scope не задан, используется текущая область.If scope is not specified, the current scope is used.

рекурсивныеrecursive(Перечислимый тип) Необязательно.(Enumerated Type) Optional. Simple (по умолчанию) или RdlRecursive.Simple (default) or RdlRecursive. Указывает, нужно ли выполнять статистическую обработку рекурсивно.Specifies whether to perform the aggregation recursively.

SQL References

SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE

Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK

Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN

Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR

Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase

Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val

Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year

Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

АргументыArguments

\nnНеобязательный параметр.Optional. Целое число, указывающее количество возвращаемых строк.An integer specifying how many rows to return.

список выраженийexpression listСписок связанных идентификаторов столбцов (производных от модели) или выражений.A comma-separated list of related column identifiers (derived from the model) or expressions.

modelmodelИдентификатор модели.A model identifier.

список условийcondition listУсловие ограничения значений, возвращаемых из списка столбцов.A condition to restrict the values that are returned from the column list.

expressionexpressionНеобязательный параметр.Optional. Выражение, возвращающее скалярное значение.An expression that returns a scalar value.

RemarksRemarks

Если аргумент scalar_expression установлен в значение ALL, будет выполнено сравнение каждого значения, возвращаемого вложенным запросом.ALL requires the scalar_expression to compare positively to every value that is returned by the subquery. Например, если вложенный запрос возвращает значения 2 и 3, то при scalar_expression scalar_expression, равного 2.For instance, if the subquery returns values of 2 and 3, scalar_expression scalar_expression of 2. Если вложенный запрос возвращает значения 2 и 3, то при scalar_expression = ALL (subquery) будет возвращаться FALSE, так как некоторые значения вложенного запроса (значение 3) могут не отвечать критериям этого выражения.If the subquery returns values of 2 and 3, scalar_expression = ALL (subquery) would evaluate as FALSE, because some of the values of the subquery (the value of 3) wouldn’t meet the criteria of the expression.

Инструкции, которым необходим аргумент scalar_expression для сравнения каждого значения, возвращенного вложенным запросом, перечислены в разделе SOME | ANY (Transact-SQL).For statements that require the scalar_expression to compare positively to only one value that is returned by the subquery, see SOME | ANY (Transact-SQL).

В этой статье приводятся ссылки на выражение ALL при его использовании совместно с вложенными запросами.This article refers to ALL when it is used with a subquery. ALL может также использоваться с инструкциями UNION и SELECT.ALL can also be used with UNION and SELECT.

RemarksRemarks

может использоваться только для возврата идентификатора текущей базы данных в Базе данных SQL Azure. may only be used to return the database identifier of the current database in Azure SQL Database. Если указанное имя базы данных отличается от текущей базы данных, возвращается значение NULL.NULL is returned if the specified database name is other than the current database.

Примечание

При использовании с Базой данных SQL Azure может вернуть не такой результат, как при запросе из представления sys.databases.When used with Azure SQL Database, may not return the same result as querying from sys.databases. Если объект, вызывающий , сравнивает результат с другими представлениями sys, то вместо этого следует отправить запрос к представлению sys. databases.If the caller of is comparing the result to other sys views, then sys.databases should be queried instead.

DISTINCT clause vs. GROUP BY clause

If you use the clause in the statement without using aggregate functions, the clause behaves like the  clause.

The following statement uses the clause to select the unique states of customers from the table.

1
2
3
4
5

SELECT

state
FROM

customers

GROUPBYstate;

You can achieve a similar result by using the clause:

1
2
3
4

SELECTDISTINCT

state
FROM

customers;

Generally speaking, the  clause is a special case of the clause. The difference between  clause and clause is that the clause sorts the result set whereas the  clause does not.

Notice that MySQL 8.0 removed the implicit sorting for the clause. Therefore, if you use MySQL 8.0+, you will find that the result set of the above query with the  clause is not sorted.

If you add the clause to the statement that uses the  clause, the result set is sorted and it is the same as the one returned by the statement that uses clause.

1
2
3
4
5
6

SELECTDISTINCT

state
FROM

customers

ORDER BY

state;

Выборка данных. Команда SELECT

Последнее обновление: 13.07.2017

Для получения данных применяется команда SELECT. В упрощенном виде она имеет следующий синтаксис:

SELECT список_столбцов FROM имя_таблицы

Например, пусть ранее была создана таблица Products, и в нее добавлены некоторые начальные данные:

CREATE TABLE Products
(
	Id INT IDENTITY PRIMARY KEY,
	ProductName NVARCHAR(30) NOT NULL,
	Manufacturer NVARCHAR(20) NOT NULL,
	ProductCount INT DEFAULT 0,
	Price MONEY NOT NULL
);

INSERT INTO Products 
VALUES 
('iPhone 6', 'Apple', 3, 36000),
('iPhone 6S', 'Apple', 2, 41000),
('iPhone 7', 'Apple', 5, 52000),
('Galaxy S8', 'Samsung', 2, 46000),
('Galaxy S8 Plus', 'Samsung', 1, 56000),
('Mi6', 'Xiaomi', 5, 28000),
('OnePlus 5', 'OnePlus', 6, 38000)

Получим все объекты из этой таблицы:

SELECT * FROM Products

Символ звездочка * указывает, что нам надо получить все столбцы.

Получение всех столбцов с помощью символа звездочки * считается не очень хорошей практикой, так как, как правило, не все столбцы бывают нужны. И более
оптимальный подход заключается в указании всех необходимых столбцов после слова SELECT. Исключение составляет тот случай, когда надо получить данные по абсолютно всем столбцам таблицы.
Также использование символа * может быть предпочтительно в таких ситуациях, когда в точности не известны названия столбцов.

Если нам надо получить данные не по всем, а по каким-то конкретным столбцам, то тогда все эти спецификации столбцов перечисляются через запятую после SELECT:

SELECT ProductName, Price FROM Products

Спецификация столбца необязательно должна представлять его название. Это может быть любое выражение, например, результат арифметической операции.
Так, выполним следующий запрос:

SELECT ProductName + ' (' + Manufacturer + ')', Price, Price * ProductCount 
FROM Products

Здесь при выборке будут создаваться три столбца. Первый столбец представляет результат объединения двух столбцов ProductName и
Manufacturer. Второй столбец — стандартный столбец Price. А третий столбец представляет значение столбца Price, умноженное на значение столбца ProductCount.

С помощью оператора AS можно изменить название выходного столбца или определить его псевдоним:

SELECT 
ProductName + ' (' + Manufacturer + ')' AS ModelName, 
Price,  
Price * ProductCount AS TotalSum
FROM Products

В данном случае результатом выборки являются данные по 3-м столбцам. Первый столбец ModelName объединяет столбцы
ProductName и Manufacturere, второй представляет стандартный столбец Price. Третий столбец TotalSum хранит произведение столбцов
ProductCount и Price. При этом, как в случае со столбцом Price, необязательно определять название результирующего столбца с помощью AS.

DISTINCT

Оператор DISTINCT позволяет выбрать уникальные строки. Например, в нашем случае в таблице может быть по несколько товаров
от одних и тех же производителей. Выберем всех производителей:

SELECT DISTINCT Manufacturer
FROM Products

В данном случае критерием разграничения строк является столбец Manufacturer. Поэтому в результирующей выборке будут только уникальные
значения Manufacturer. И если, к примеру, в базе данных есть два товара с производителем Apple, то это название будет встречаться в результирующей выборке только один раз.

SELECT INTO

Выражение SELECT INTO позволяет выбрать из одной таблицы некоторые данные в другую таблицу, при этом вторая таблица создается автоматически.
Например:

SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price
INTO ProductSummary
FROM Products

SELECT * FROM ProductSummary

После выполнения этой команды в базе данных будет создана еще одна таблица ProductSummary, которая будет иметь два столбца
ModelName и Price, а данные для этих столбцов будут взяты из таблицы Products:

При выполнении этой команды таблица, в которую идет выборка (в данном случае ProductSummary), не должна существовать в базе данных.

Но, допустим, мы потом решили добавить все данные из таблицы Products в уже существующую таблицу ProductSummary.
В этом случае можно опять же использовать команду INSERT:

INSERT INTO ProductSummary
SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price
FROM Products

Здесь добавляемые значения фактически представляют результат выборки из таблицы Products.

НазадВперед

ОграниченияLimitations and Restrictions

  • Обновление статистики во внешних таблицах не поддерживается.Updating statistics is not supported on external tables. Для обновления статистики во внешней таблице удалите и повторно создайте статистику.To update statistics on an external table, drop and re-create the statistics.
  • Каждый объект статистики может содержать до 64 столбцов.You can list up to 64 columns per statistics object.
  • Параметр MAXDOP несовместим с параметрами STATS_STREAM, ROWCOUNT и PAGECOUNT.The MAXDOP option is not compatible with STATS_STREAM, ROWCOUNT and PAGECOUNT options.
  • Параметр MAXDOP ограничивается параметром MAX_DOP группы рабочей нагрузки Resource Governor (если применимо).The MAXDOP option is limited by the Resource Governor workload group MAX_DOP setting, if used.

Шаг 5 — SELECT — дальше и глубже

Продолжим изучение возможностей команды SELECT — основы Transact-SQL. Она способна извлечь строго определенную информацию из таблицы. Для начала рассмотрим выбор определенных столбцов таблицы. Это достигается исключением столбцов из команды SELECT. Запрос:

SELECT sname, comm
FROM Salespeople

выведет следующее:

sname    comm
-------- -----------
Иванов   12
Петров   13
Егоров   10
Сидоров  11
Шилин    15

DISTINCT — аргумент, который обеспечивает устранение двойных значений
в Вашей команде SELECT. Предположим, что Вы хотите знать какие агенты
в настоящий момент имеют заказы в таблице заказов. Вам не нужно знать сколько
заказов имеет каждый, Вам нужен только список кодов агентов (snum).
Поэтому Вы можете ввести:

SELECT snum
FROM Orders

И получите такой результат:

snum        
----------- 
1007
1004
1001
1002
1007
1002
1001
1003
1002
1001

Как видим коды дублируются. Для получения списка без дубликатов надо
ввести следующее:

SELECT DISTINCT snum
FROM Orders

Результат уже другой:

snum
-----------
1001
1002
1003
1004
1007

DISTINCT может указываться только один раз в команде SELECT,
если выбираются несколько столбцов, то DISTINCT опускает строки,
где все выбранные поля идентичны. Строки, в которых некоторые значения
одинаковы, а некоторые различны — будут сохранены.

Вместо DISTINCT Вы можете указать ALL. Это будет иметь
противоположный эффект, дублирование строк сохранится. Поскольку это
тот же самый случай, когда не указывается никакой аргумент, то ALL
по существу лишь пояснительный аргумент.

Таблицы имеют тенденцию становиться очень большими. Поскольку обычно только
некоторые их них интересуют Вас в данное время имеется возможность устанавливать
критерии, чтобы определить какие строки будут выбраны.

WHERE — предложение команды SELECT, которое позволяет задавать
условие, которое может быть верным или неверным для любой строки таблицы. Команда
извлекает только те строки из таблицы, для которых это условие верно.
Предположим, что Вы хотите видеть имена и комиссионные всех агентов в Москве.
Нет ничего проще:

SELECT sname, city
FROM Salespeople
WHERE city = 'Москва'

Когда в запросе имеется предложение WHERE SQL Server просматривает
всю таблицу построчно и исследует каждую строку, чтобы определить верно ли
утверждение.

Примечание

Теперь попробуем построить запрос с числовым полем в предложении WHERE.
Поле rating таблицы Заказчики (Customers) предназначено, чтобы разделять
заказчиков на группы, основанные на некоторых критериях, которые могут быть получены
через это число. Например это может форма оценки кредита и оценка, зависящая от объема
предыдущих заказов. Выберем всех заказчиков с рейтингом 100:

SELECT *
FROM Customers
WHERE rating = 100

Кавычки здесь не используются, т.к. рейтинг — это числовое поле. Результат
запроса:

CNUM  CNAME              CITY    RATING      SNUM
----- ------------------ ------- ----------- -----------
2001  ТОО Рога и копыта  Москва  100         1001
2006  Clemens            Лондон  100         1001
2007  ОАО "ООО"          ТОМСК   100         1004

Теперь Вы знаете несколько способов как заставить таблицу давать Вам ту информацию какую Вы хотите

Самое важное, что у Вас естьвозможность устанавливать условие, которое выделяет строку из тысяч строк в таблице. Условия могут быть очень сложными, именно это и делает язык SQL таким мощным.


Предыдущий Шаг | Следующий Шаг | ОглавлениеАвтор .

RemarksRemarks

Значение scope должно быть строковой константой и не может быть выражением.The value of scope must be a string constant and cannot be an expression. Для внешних агрегатов и агрегатов, в которых не задаются другие агрегаты, параметр scope должен ссылаться не текущую область или включающую область.For outer aggregates or aggregates that do not specify other aggregates, scope must refer to the current scope or a containing scope. Для агрегатов, содержащих агрегаты, во вложенных агрегатах может указываться дочерняя область.For aggregates of aggregates, nested aggregates can specify a child scope.

Expression может содержать вызовы вложенных агрегатных функций со следующими условиями и исключениями.Expression can contain calls to nested aggregate functions with the following exceptions and conditions:

  • ПараметрScope для вложенных агрегатов должен совпадать с областью внешнего агрегата или входить в нее.Scope for nested aggregates must be the same as, or contained by, the scope of the outer aggregate. Одна область из всех уникальных областей в выражении должна быть дочерней относительно всех других областей.For all distinct scopes in the expression, one scope must be in a child relationship to all other scopes.

  • ПараметрScope для вложенных агрегатов не может быть именем набора данных.Scope for nested aggregates cannot be the name of a dataset.

  • Expression не может содержать функции First, Last, Previousи RunningValue .Expression must not contain First, Last, Previous, or RunningValue functions.

  • Expression не может содержать вложенные агрегаты, в которых указан параметр recursive.Expression must not contain nested aggregates that specify recursive.

Дополнительные сведения см. в разделах Справочник по агрегатным функциям (построитель отчетов и службы SSRS) и Область выражения для суммирования, агрегатных функций и встроенных коллекций (построитель отчетов и службы SSRS).For more information, see Aggregate Functions Reference (Report Builder and SSRS) and Expression Scope for Totals, Aggregates, and Built-in Collections (Report Builder and SSRS).

Дополнительные сведения о рекурсивных агрегатах см. в разделе Создание групп рекурсивной иерархии (построитель отчетов и службы SSRS).For more information about recursive aggregates, see Creating Recursive Hierarchy Groups (Report Builder and SSRS).

АргументыArguments

new_table new_table Указывает имя новой таблицы, создаваемой на основе столбцов, указанных в списке выбора, и строк, выбираемых из источника данных.Specifies the name of a new table to be created, based on the columns in the select list and the rows chosen from the data source.

Формат аргумента new_table определяется путем расчета выражений, указанных в списке выбора.The format of new_table is determined by evaluating the expressions in the select list. Столбцы в таблице, указанной в аргументе new_table, создаются в порядке, соответствующем списку выбора.The columns in new_table are created in the order specified by the select list. Все столбцы таблицы, указанной в аргументе new_table, получают такие же имена, значения, типы данных и свойства допустимости значений NULL, которые указаны в соответствующем выражении в списке выбора.Each column in new_table has the same name, data type, nullability, and value as the corresponding expression in the select list. Свойство IDENTITY столбца переносится за исключением случаев, когда наступают условия, описанные в подразделе «Примечания» раздела «Работа со столбцами идентификаторов».The IDENTITY property of a column is transferred except under the conditions defined in «Working with Identity Columns» in the Remarks section.

Для того чтобы создать таблицу в другой базе данных в этом же экземпляре службы SQL ServerSQL Server, определите new_table в качестве полного имени в форме database.schema.table_name.To create the table in another database on the same instance of SQL ServerSQL Server, specify new_table as a fully qualified name in the form database.schema.table_name.

new_table нельзя создать на удаленном сервере, однако new_table можно заполнить из удаленного источника данных.You cannot create new_table on a remote server; however, you can populate new_table from a remote data source. Для создания таблицы new_table из удаленного источника таблицы определите источник таблицы, используя четырехчастное имя в форме linked_server.catalog.schema.object в предложении FROM инструкции SELECT.To create new_table from a remote source table, specify the source table using a four-part name in the form linked_server.catalog.schema.object in the FROM clause of the SELECT statement. Для указания удаленного источника данных также можно использовать функцию OPENQUERY или функцию OPENDATASOURCE в предложении FROM.Alternatively, you can use the OPENQUERY function or the OPENDATASOURCE function in the FROM clause to specify the remote data source.

filegroup filegroup Указывает имя файловой группы, в которой будет создана таблица.Specifies the name of the filegroup in which new table will be created. Указанная файловая группа должна существовать в базе данных, в противном случае обработчик SQL Server создает ошибку.The filegroup specified should exist on the database else the SQL Server engine throws an error.

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и выше.Applies to: SQL Server 2016 (13.x);SQL Server 2016 (13.x) SP2 and later.

ПримерыExamples

A.A. Сравнение значений по годамCompare values between years

В следующем примере показано использование функции LAG для возврата разности в квотах продаж для указанного работника за предыдущие годы.The following example uses the LAG function to return the difference in sales quotas for a specific employee over previous years

Обратите внимание, что для первой строки возвращается значение, установленное по умолчанию, т. е

нуль (0), так как значение за предыдущие периоды для нее недоступно.Notice that because there is no lag value available for the first row, the default of zero (0) is returned.

Результирующий набор:Here is the result set.

Б.B. Сравнение значений внутри секцийCompare values within partitions

В следующем примере используется функция LAG для сравнения количества продаж за текущий год между сотрудниками.The following example uses the LAG function to compare year-to-date sales between employees. Предложение PARTITION BY указывается для разделения строк результирующего набора по территориям продаж.The PARTITION BY clause is specified to divide the rows in the result set by sales territory. Функция LAG применяется к каждой секции отдельно, а вычисление начинается заново для каждой секции.The LAG function is applied to each partition separately and computation restarts for each partition. Предложение ORDER BY в предложении OVER упорядочивает строки в каждой секции.The ORDER BY clause in the OVER clause orders the rows in each partition. Предложение ORDER BY в инструкции SELECT сортирует сроки во всем результирующем наборе.The ORDER BY clause in the SELECT statement sorts the rows in the whole result set

Обратите внимание, что для первой строки возвращается значение, установленное по умолчанию, т. е

нуль (0), так как значение за предыдущий период для первой строки каждой секции недоступно.Notice that because there is no lag value available for the first row of each partition, the default of zero (0) is returned.

Результирующий набор:Here is the result set.

В.C. Указание произвольных выраженийSpecifying arbitrary expressions

В следующем примере демонстрируется указание ряда произвольных выражений в синтаксисе функции LAG.The following example demonstrates specifying a variety of arbitrary expressions in the LAG function syntax.

Результирующий набор:Here is the result set.

См. такжеSee also

  • Форум для разработчиков AccessAccess for developers forum
  • Помощь при работе с Access на support.office.comAccess help on support.office.com
  • Форумы Access на UtterAccessAccess forums on UtterAccess
  • Справочный центр (FMS) для разработки и VBA программирования для AccessAccess developer and VBA programming help center (FMS)
  • Публикации по Access на StackOverflowAccess posts on StackOverflow

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

DISTINCT или GROUP BY в MySQL

В MySQL DISTINCT наследует поведение от GROUP BY. Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT.

Единственное отличие между ними заключается в следующем:

  • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
  • Ключевое слово DISTINCTне выполняет сортировки.

Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY, то получите тот же результат, что и при применении GROUP BY. Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails;

Результат:

Уберём ключевое слово DISTINCT и используем выражение GROUP BY:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT Profession
FROM customerdetails
GROUP BY Profession;

Как видите, запрос возвращает тот же результат, но в другом порядке:

В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails
ORDER BY Profession ASC;

Результат тот же, что и при использовании GROUP BY:

Обзор отказоустойчивой кластеризации Windows ServerOverview of Windows Server Failover Clustering

Отказоустойчивая кластеризация Windows Server предусматривает инфраструктурные компоненты, поддерживающие сценарии высокого уровня доступности и аварийного восстановления для таких размещенных серверных приложений, как Microsoft SQL ServerSQL Server и Microsoft Exchange.Windows Server Failover Clustering provides infrastructure features that support the high-availability and disaster recovery scenarios of hosted server applications such as Microsoft SQL ServerSQL Server and Microsoft Exchange. При отказе узла кластера или службы все службы, которые размещались на этом узле, могут автоматически или вручную переноситься на другой доступный узел в рамках процесса под названием отработка отказа.If a cluster node or service fails, the services that were hosted on that node can be automatically or manually transferred to another available node in a process known as failover.

Узлы в кластере WSFC за счет совместной работы обеспечивают следующие типы возможностей:The nodes in the WSFC cluster work together to collectively provide these types of capabilities:

  • Распределенные метаданные и уведомления.Distributed metadata and notifications. Метаданные служб и размещенных приложений WSFC хранятся на каждом узле кластера.WSFC service and hosted application metadata is maintained on each node in the cluster. Среди этих метаданных не только параметры размещенных приложений, но также конфигурация и состояние WSFC.This metadata includes WSFC configuration and status in addition to hosted application settings. Изменения в метаданных или состоянии узла автоматически распространяются на других узлах кластера.Changes to a node’s metadata or status are automatically propagated to the other nodes in the cluster.

  • Управление ресурсами.Resource management. Отдельные узлы в кластере могут предоставлять физические ресурсы, например подключаемое напрямую хранилище, сетевые интерфейсы и доступ к общему дисковому хранилищу.Individual nodes in the cluster may provide physical resources such as direct-attached storage, network interfaces, and access to shared disk storage. Размещенные приложения регистрируют себя как ресурсы кластера и могут настраивать запуск и зависимости от исправности других ресурсов.Hosted applications register themselves as a cluster resource, and may configure startup and health dependencies upon other resources.

  • Мониторинг работоспособности.Health monitoring. Определение исправности основного узла и исправности между узлами осуществляется за счет сочетания сетевых соединений по типу тактовых импульсов и мониторинга ресурсов.Inter-node and primary node health detection is accomplished through a combination of heartbeat-style network communications and resource monitoring. Общее состояние работоспособности кластера определяется голосами кворума узлов в кластере.The overall health of the cluster is determined by the votes of a quorum of nodes in the cluster.

  • Координация при отработке отказа.Failover coordination. Каждый ресурс настроен для размещения на основном узле, и каждый можно автоматически или вручную переносить на один или несколько второстепенных узлов.Each resource is configured to be hosted on a primary node, and each can be automatically or manually transferred to one or more secondary nodes. Политика отработки отказа в зависимости от исправности управляет автоматическим переносом владения ресурсами между узлами.A health-based failover policy controls automatic transfer of resource ownership between nodes. Узлы и размещенные приложения получают уведомления об отработке отказа, что позволяет им выполнить соответствующие действия.Nodes and hosted applications are notified when failover occurs so that they may react appropriately.

Дополнительные сведения см. в статье Отказоустойчивые кластеры в Windows Server 2008 R2For more information, see: Failover Clusters in Windows Server 2008 R2

Общие замечанияGeneral Remarks

SQL ServerSQL Server может использовать базу данных tempdb для сортировки выбранных строк до создания статистики.can use tempdb to sort the sampled rows before building statistics.

Статистика для внешних таблицStatistics for external tables

При создании статистики внешней таблицы SQL ServerSQL Server импортирует внешнюю таблицу во временную таблицу SQL ServerSQL Server, а затем создает статистику.When creating external table statistics, SQL ServerSQL Server imports the external table into a temporary SQL ServerSQL Server table, and then creates the statistics. Для примеров статистики импортируются только строки с выборкой.For samples statistics, only the sampled rows are imported. При наличии большой внешней таблицы выборка по умолчанию будет работать гораздо быстрее полной проверки.If you have a large external table, it will be much faster to use the default sampling instead of the full scan option.

Статистика с отфильтрованным условиемStatistics with a filtered condition

Отфильтрованная статистика может повысить производительность запросов, которые выполняют выборку из четко определенных подмножеств данных.Filtered statistics can improve query performance for queries that select from well-defined subsets of data. Отфильтрованная статистика использует предикат фильтра в предложении WHERE для выбора подмножества данных, включенных в статистику.Filtered statistics use a filter predicate in the WHERE clause to select the subset of data that is included in the statistics.

Условия использования инструкции CREATE STATISTICSWhen to Use CREATE STATISTICS

Дополнительные сведения об условиях использования CREATE STATISTICS см. в разделе Статистика.For more information about when to use CREATE STATISTICS, see Statistics.

Ссылка на основную публикацию