Sql distinct пример: SQL Инструкция SELECT DISTINCT
ВСЕ, DISTINCT, DISTINCTROW, ВЕРХНие предикаты (Microsoft Access SQL)
-
- Чтение занимает 3 мин
В этой статье
Область применения: Access 2013 | Access 2016Applies to: Access 2013 | Access 2016
Указывает записи, выбранные с запросами SQL.Specifies records selected with SQL queries.
СинтаксисSyntax
ВЫБЕРИТЕ [ALL | DISTINCT | DISTINCTROW | [TOP n [percent]]] ИЗ таблицыSELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM table
Инструкция SELECT, содержащая эти предикаты, состоит из следующих частей.A SELECT statement containing these predicates has the following parts.
ALL: предполагается, если не включен один из предикатов.ALL: Assumed if you do not include one of the predicates. Ядро СУБД Microsoft Access выбирает все записи, которые удовлетворяют условиям оператора SQL.The Microsoft Access database engine selects all of the records that meet the conditions in the SQL statement.
Два приведенных ниже примера эквивалентны и возвращают все записи из таблицы Employees:The following two examples are equivalent and return all records from the Employees table:
SELECT ALL * FROM Employees ORDER BY EmployeeID;
SELECT * FROM Employees ORDER BY EmployeeID;
DISTINCT: исключает записи, содержащие повторяющиеся данные в выбранных полях.DISTINCT: Omits records that contain duplicate data in the selected fields. Для включения в результаты запроса значения для каждого поля, указанного в операторе SELECT, должны быть уникальными.To be included in the results of the query, the values for each field listed in the SELECT statement must be unique. Например, несколько сотрудников, перечисленных в таблице Employees, могут иметь одно и то же фамилию.For example, several employees listed in an Employees table may have the same last name. Если две записи содержат Smith в поле LastName, приведенная ниже инструкция SQL возвращает только одну запись, содержащую Smith:If two records contain Smith in the LastName field, the following SQL statement returns only one record that contains Smith:
SELECT DISTINCT LastName FROM Employees;
Если опустить DISTINCT, этот запрос возвращает обе записи Smith.If you omit DISTINCT, this query returns both Smith records. Если предложение SELECT содержит более одного поля, сочетание значений из всех полей должно быть уникальным для включения записи в результаты.If the SELECT clause contains more than one field, the combination of values from all fields must be unique for a given record to be included in the results. Выходные данные запроса, использующего DISTINCT, не обновляются и не отражают последующие изменения, внесенные другими пользователями.The output of a query that uses DISTINCT is not updatable and does not reflect subsequent changes made by other users.
DISTINCTROW: пропускает данные на основе всех повторяющихся записей, а не только на повторяющихся полях.DISTINCTROW: Omits data based on entire duplicate records, not just duplicate fields. Например, вы можете создать запрос, который присоединяет таблицы Customers и Orders в поле CustomerID.For example, you could create a query that joins the Customers and Orders tables on the CustomerID field. Таблица Customers не содержит дублирующихся полей CustomerID, но таблица Orders, так как каждый клиент может иметь много заказов.The Customers table contains no duplicate CustomerID fields, but the Orders table does because each customer can have many orders. Приведенная ниже инструкция SQL показывает, как можно использовать DISTINCTROW для создания списка компаний, у которых есть по крайней мере один заказ, но без дополнительных сведений об этих заказах:The following SQL statement shows how you can use DISTINCTROW to produce a list of companies that have at least one order but without any details about those orders:
SELECT DISTINCTROW CompanyName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY CompanyName;
Если опустить DISTINCTROW, этот запрос создает несколько строк для каждой компании, имеющей более одного заказа.If you omit DISTINCTROW, this query produces multiple rows for each company that has more than one order. DISTINCTROW действует только в том случае, если выбраны поля из одних, но не всех таблиц, используемых в запросе.DISTINCTROW has an effect only when you select fields from some, but not all, of the tables used in the query. DISTINCTROW игнорируется, если запрос содержит только одну таблицу или если вы выводите поля из всех таблиц.DISTINCTROW is ignored if your query includes only one table, or if you output fields from all tables.
Top n [percent]: возвращает определенное количество записей, которые попадают в верхнюю или нижнюю часть диапазона, УКАЗАННОГО предложением ORDER BY.TOP n [PERCENT]: Returns a certain number of records that fall at the top or the bottom of a range specified by an ORDER BY clause. Предположим, что вы хотите, чтобы имена первых 25 студентов из класса 1994:Suppose you want the names of the top 25 students from the class of 1994:
SELECT TOP 25 FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage DESC;
Если не включить предложение ORDER BY, запрос возвратит произвольный набор из 25 записей из таблицы Students, удовлетворяющих предложению WHERE.If you do not include the ORDER BY clause, the query will return an arbitrary set of 25 records from the Students table that satisfy the WHERE clause. Предикат TOP не выбирает между равными значениями.The TOP predicate does not choose between equal values. В предыдущем примере, если двадцать пятый и двадцать шестой средние значения среднего уровня одинаковы, запрос возвратит 26 записей.In the preceding example, if the twenty-fifth and twenty-sixth highest grade point averages are the same, the query will return 26 records. Вы также можете использовать зарезервированное слово PERCENT, чтобы получить определенный процент записей, которые попадают в верхнюю или нижнюю часть диапазона, указанного предложением ORDER BY.You can also use the PERCENT reserved word to return a certain percentage of records that fall at the top or the bottom of a range specified by an ORDER BY clause. Предположим, что вместо 25 лучших студентов вы хотите 10 самых нижних студентов:Suppose that, instead of the top 25 students, you want the bottom 10 percent of the class:
SELECT TOP 10 PERCENT FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage ASC;
Предикат ASC задает возвращение значений из нижней части.The ASC predicate specifies a return of bottom values. Значение, которое следует за знаком TOP, должно быть целым числом.The value that follows TOP must be an unsigned Integer. TOP не влияет на то, является ли запрос обновляемым.TOP does not affect whether or not the query is updatable.
Таблица: имя таблицы, из которой извлекаются записи.table: The name of the table from which records are retrieved.
ПримерExample
В этом примере создается запрос, который присоединяет таблицы Customers и Orders в поле CustomerID.This example creates a query that joins the Customers and Orders tables on the CustomerID field. Таблица Customers не содержит дублирующихся полей CustomerID, но таблица Orders, так как каждый клиент может иметь много заказов.The Customers table contains no duplicate CustomerID fields, but the Orders table does because each customer can have many orders. С помощью DISTINCTROW создается список компаний, у которых есть по крайней мере один заказ, но без дополнительных сведений об этих заказах.Using DISTINCTROW produces a list of companies that have at least one order but without any details about those orders.
Sub AllDistinctX()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Join the Customers and Orders tables on the
' CustomerID field. Select a list of companies
' that have at least one order.
Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _
& "CompanyName FROM Customers " _
& "INNER JOIN Orders " _
& "ON Customers.CustomerID = " _
& "Orders.CustomerID " _
& "ORDER BY CompanyName;")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 25
dbs.Close
End Sub
См. такжеSee also
Поддержка и обратная связь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.
PostgreSQL оператор DISTINCT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать PostgreSQL оператор DISTINCT с синтаксисом и примерами.
Описание
PostgreSQL оператор DISTINCT используется для удаления дубликатов из набора результатов. DISTINCT может использоваться только с операторами SELECT.
Синтаксис
Синтаксис для оператора DISTINCT в PostgreSQL:
SELECT DISTINCT | DISTINCT ON (distinct_expressions)
expressions
FROM tables
[WHERE conditions];
Параметры или аргументы
- distinct_expressions
- Выражения, используемые для удаления дубликатов.
- expressions
- Столбцы или вычисления, которые вы хотите получить.
- tables
- Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.
Примечание
- Если в DISTINCT указано только одно выражение, запрос возвратит уникальные значения для этого выражения.
- Если в DISTINCT указано несколько выражений, запрос извлекает уникальные комбинации для перечисленных выражений.
- Если заданы ключевые слова DISTINCT ON, запрос возвратит уникальные значения для Different_expressions и вернет другие поля для выбранных записей на основе предложения ORDER BY (limit 1).
- В PostgreSQL DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем операторе SQL ваш результирующий набор будет содержать значение NULL как отдельное значение.
Пример — с одним выражением
Рассмотрим на простейший пример DISTINCT в PostgreSQL. Мы можем использовать оператор DISTINCT, чтобы вернуть одно поле, которое удаляет дубликаты из набора результатов.
Например:
SELECT DISTINCT last_name
FROM contacts
ORDER BY last_name;
SELECT DISTINCT last_name FROM contacts ORDER BY last_name; |
В этом PostgreSQL примере DISTINCT будут возвращены все уникальные значения last_name из таблицы contacts.
Пример — с несколькими выражениями
Давайте посмотрим, как вы можете использовать оператор PostgreSQL DISTINCT для удаления дубликатов из более чем одного поля в вашем операторе SELECT.
Например:
SELECT DISTINCT last_name, city, state
FROM contacts
ORDER BY last_name, city, state;
SELECT DISTINCT last_name, city, state FROM contacts ORDER BY last_name, city, state; |
Этот пример будет возвращать каждую уникальную комбинацию last_name, city и state из таблицы contacts. В этом случае DISTINCT применяется к каждому полю, указанному после ключевого слова DISTINCT, и, следовательно, возвращает различные комбинации.
Пример — DISTINCT ON
Одна вещь, которая уникальна в PostgreSQL, по сравнению с другими базами данных, заключается в том, что у вас есть еще одна опция при использовании оператора DISTINCT, которая называется DISTINCT ON.
DISTINCT ON вернет только первую строку для DISTINCT ON (diver_expressions) на основе оператора ORDER BY, предоставленного в запросе. Любые другие поля, перечисленные в операторе SELECT, будут возвращены для этой первой строки. Это похоже на выполнение LIMIT в 1 для каждой комбинации DISTINCT ON (Different_expressions).
Давайте подробнее рассмотрим, как использовать DISTINCT ON в операторе DISTINCT и что он возвращает.
Таким образом, мы могли бы изменить пример выше :
SELECT DISTINCT ON (last_name) last_name, city, state
FROM contacts
ORDER BY last_name, city, state;
SELECT DISTINCT ON (last_name) last_name, city, state FROM contacts ORDER BY last_name, city, state; |
Этот пример DISTINCT, в котором используются ключевые слова DISTINCT ON, вернет все уникальные значения last_name. Но в этом случае для каждого уникального значения last_name он будет возвращать только первую уникальную запись last_name, с которой он сталкивается, на основе оператора ORDER BY вместе с city и state значениями из этой записи.
Он не возвращает уникальные комбинации last_name, city и state. По сути, он выполняет LIMIT, равный 1, для каждого DISTINCT ON (last_name) и возвращает соответствующие значения city и state после того, как он выбрал возвращеные записи.
SQL — ключевое слово Distinct
Ключевое слово DISTINCT используется в сочетании с SELECT, чтобы устранить все дубликаты записей и выборку только уникальных записей.
Там может быть ситуация, когда у вас есть несколько дублирующих записей в таблице. Выборка таких записей, имеет смысл, чтобы показать только уникальные записи вместо выборки повторяющихся записей.
Синтаксис
Базовый синтаксис ключевого слова DISTINCT, чтобы устранить дублирующие записи выглядят следующим образом:
SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]
Примеры
Рассмотрим таблицу клиентов, имеющих следующие записи:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 34000.00 | | 5 | Ruslan | 34 | Omsk | 45000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | Roma | 34 | SP | 10000.00 | +----+----------+-----+-----------+----------+
Во-первых, давайте посмотрим, как следующий запрос SELECT возвращает повторяющиеся записи заработной платы.
SQL> SELECT SALARY FROM CUSTOMERS ORDER BY SALARY;
Это произведет следующий результат, где зарплата (34000 и 45000) приходит дважды, дублирует записи из исходной таблицы.
+----------+ | SALARY | +----------+ | 21000.00 | | 55000.00 | | 34000.00 | | 34000.00 | | 45000.00 | | 45000.00 | | 10000.00 | +----------+
Теперь, давайте используем ключевое слово DISTINCT с указанным запросом SELECT, а затем увидим результат.
SQL> SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;
Это произведет следующий результат, где у нас нет каких-либо повторяющихся записей.
+----------+ | SALARY | +----------+ | 21000.00 | | 55000.00 | | 34000.00 | | 45000.00 | | 10000.00 | +----------+
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Руководство по SQL. Получение уникальных данных. – PROSELYTE
Для получения только уникальных записей в языке SQL предусмотрено ключевое слово DISTINCT.
В работе мы можем столкнуться с ситуацией, когда у нас есть повторяющиеся записи в таблице и вместо того, чтобы получать их все, нам целесообразно получить только уникальные элементы.
Запрос с использованием ключевого слова DISTINCT имеет следующий вид:
SELECT DISTINCT колонка1, колонка2 ... колонкаN
FROM имя_таблицы
WHERE [условие];
Пример:
Предположим, что у нас есть таблица developers, которая имеет следующий вид:
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
| 4 | Konstantin Geiko | C# | 2 | 2000 |
| 5 | Asya Suleimanova | UI/UX | 2 | 1800 |
| 6 | Kolya Nikolaev | Javascript | 5 | 3400 |
| 7 | Ivan Ivanov | C# | 1 | 900 |
| 8 | Ludmila Geiko | UI/UX | 2 | 1800 |
+----+-------------------+------------+------------+--------+
Допустим, мы хотим узнать какие специальности есть у нас в таблице.
Попробуем использовать средства, которые мы уже изучили:
mysql> SELECT SPECIALTY FROM developers
ORDER BY SPECIALTY;
После выполнения данного запроса мы получим следующий результат:
+------------+
| SPECIALTY |
+------------+
| C# |
| C# |
| Java |
| Java |
| JavaScript |
| Javascript |
| UI/UX |
| UI/UX |
+------------+
Как мы видим, все специальности повторяются дважды. Если же в нашей таблице будет миллион записей, понять, какие же специальности у нас есть станет крайне затруднительным.
Теперь попробуем использовать ключевое слово DISTINCT.
mysql> SELECT DISTINCT SPECIALTY FROM developers
ORDER BY SPECIALTY;
В результате обработки данного запроса мы получим следующий результат:
+------------+
| SPECIALTY |
+------------+
| C# |
| Java |
| JavaScript |
| UI/UX |
+------------+
На этом мы заканчиваем изучение ключевого слова DISTINCT языка SQL.
В следующей статье мы рассмотрим механизм получения данных сразу из нескольких таблиц с помощью ключевого слова JOIN.
Как использовать DISTINCT и ORDER BY в том же операторе SELECT?
расширенные ключевые столбцы сортировки
причина, что вы хотите сделать, не работает из-за логический порядок операций в SQL, который, для вашего первого запроса, это (упрощенный):
FROM MonitoringJob
-
SELECT Category, CreationDate
т. е. добавить так называемый расширенный столбец ключа сортировки ORDER BY CreationDate DESC
-
SELECT Category
т. е. удалить расширенный столбец ключа сортировки снова от результат.
Итак, благодаря стандарту SQL расширенный столбец ключа сортировки особенность, полностью возможно приказать что-то которое нет в SELECT
предложение, потому что оно временно добавляется к нему за кулисами.
Итак, почему это не работает с DISTINCT
?
если мы добавляем DISTINCT
операция, она будет добавлена между SELECT
и ORDER BY
:
FROM MonitoringJob
SELECT Category, CreationDate
DISTINCT
ORDER BY CreationDate DESC
SELECT Category
С расширенный столбец ключа сортировки CreationDate
семантика DISTINCT
операция была изменена, поэтому результат больше не будет таким же. Это не то, что мы хотим, поэтому и стандарт SQL, и все разумные базы данных запрещают это использование.
решения
PostgreSQL имеет DISTINCT ON
синтаксис, который можно использовать здесь именно эту работу:
SELECT DISTINCT ON (CreationDate) Category
FROM MonitoringJob
ORDER BY CreationDate DESC
его можно эмулировать со стандартным синтаксисом следующим образом
SELECT Category
FROM (
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
) t
ORDER BY CreationDate DESC
или, просто (в этом случае), как показано также Prutswonder
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
я написал в блоге о SQL DISTINCT и ORDER более подробно здесь.
Устранение дубликатов с помощью оператора SQL DISTINCT
Резюме : в этом руководстве вы узнаете, как использовать оператор SQL DISTINCT для удаления повторяющихся строк в наборе результатов.
Набор результатов оператора SELECT может содержать повторяющиеся строки. Чтобы удалить дубликаты, используйте оператор DISTINCT
следующим образом:
SELECT DISTINCT column_1, column2 FROM table; |
Обратите внимание, что оператор DISTINCT
можно использовать только в операторе SELECT
.
Механизм базы данных использует значения столбцов, указанных после оператора DISTINCT
, для оценки уникальности строки в наборе результатов. Если вы укажете один столбец, ядро базы данных будет использовать значения в столбце для оценки уникальности. Если вы указываете несколько столбцов, ядро базы данных оценивает уникальность строк на основе комбинации значений в этих столбцах.
Примеры оператора SQL DISTINCT
Давайте рассмотрим несколько примеров использования оператора DISTINCT
в операторе SELECT
.
SQL DISTINCT, пример одного столбца
Следующий запрос получает город сотрудника в таблице сотрудников
:
ВЫБРАТЬ город ИЗ сотрудников |
В результирующем наборе содержится повторяющийся город, т. Е. Лондон
появляется четыре раза, что указывает на то, что некоторые сотрудники находятся в одном городе.
Чтобы удалить повторяющиеся города, вы можете использовать оператор DISTINCT
как следующий запрос:
SELECT DISTINCT город ОТ сотрудников; |
Пример нескольких столбцов SQL DISTINCT
Чтобы найти список уникальных городов и стран сотрудников, вы можете указать столбцы city
и country
после оператора DISTINCT
в виде следующего запроса:
SELECT DISTINCT город, страна ИЗ сотрудников; |
Комбинация значений в столбцах города и страны используется для определения уникальности строк в наборе результатов.
SQL DISTINCT со значениями NULL
Оператор DISTINCT
обрабатывает значений NULL
как дублирующие друг друга, поэтому, если оператор SELECT
возвращает значений NULL
, при использовании возвращается только одно значение NULL
оператор DISTINCT
.
Давайте посмотрим на следующий пример:
SELECT регион FROM сотрудников |
Запрос возвращает повторяющиеся регионы, в результате которых значение NULL
появляется 4 раза установлен.Давайте применим в запросе оператор DISTINCT
следующим образом:
SELECT DISTINCT регион ИЗ сотрудников; |
Теперь у нас есть только одно значение NULL
, включенное в набор результатов.
SQL DISTINCT с агрегатными функциями
Помимо удаления дубликатов, вы можете использовать оператор DISTINCT
в сочетании с агрегатной функцией, например:
- COUNT:
COUNT (столбец DISTINCT)
для подсчета различных значений в наборе результатов . - SUM:
SUM (DISTINCT столбец)
для вычисления суммы различных значений.
Например, чтобы подсчитать отдельные города сотрудников, вы используете оператор DISTINCT
с функцией COUNT
в качестве следующего запроса:
SELECT COUNT (DISTINCT city) FROM сотрудников; |
Чтобы вычислить сумму отдельных цен за единицу продуктов в таблице продуктов
, вы используете оператор DISTINCT
с функцией SUM
следующим образом:
SELECT SUM ( DISTINCT unitprice) ИЗ товаров; |
DISTINCT vs.ALL
В этом руководстве стоит упомянуть оператор ALL
. В отличие от оператора DISTINCT
, оператор ALL
используется для включения всех строк, содержащих повторяющиеся строки, в набор результатов. Следующие запросы возвращают тот же набор результатов.
ВЫБРАТЬ ВСЕ column_1, column_2 FROM table; |
ВЫБРАТЬ столбец_1, столбец_2 ИЗ таблица; |
Оператор SELECT
по умолчанию использует оператор ALL
, поэтому вам не нужно явно указывать его в операторе.
В этом руководстве мы показали вам, как использовать оператор DISTINCT
в операторе SELECT
, чтобы удалить повторяющиеся строки в наборе результатов.
- Было ли это руководство полезным?
- Да Нет
.
SQL Server query — выбор COUNT (*) с DISTINCT
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Предикаты ALL, DISTINCT, DISTINCTROW, TOP (Microsoft Access SQL)
- 4 минуты на чтение
В этой статье
Применимо к: Access 2013 | Доступ 2016
Задает записи, выбранные с помощью SQL-запросов.
Синтаксис
ВЫБРАТЬ [ВСЕ | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] ИЗ таблица
Оператор SELECT, содержащий эти предикаты, состоит из следующих частей.
ВСЕ : Предполагается, если вы не включили один из предикатов. Ядро базы данных Microsoft Access выбирает все записи, которые соответствуют условиям в операторе SQL.
Следующие два примера эквивалентны и возвращают все записи из таблицы Employees:
ВЫБРАТЬ ВСЕ * ОТ сотрудников ЗАКАЗАТЬ ПО EmployeeID;
ВЫБРАТЬ * ОТ сотрудников ЗАКАЗАТЬ ПО EmployeeID;
DISTINCT : пропускает записи, содержащие повторяющиеся данные в выбранных полях.Чтобы быть включенными в результаты запроса, значения для каждого поля, перечисленного в операторе SELECT, должны быть уникальными. Например, несколько сотрудников, перечисленных в таблице «Сотрудники», могут иметь одинаковую фамилию. Если две записи содержат Smith в поле LastName, следующий оператор SQL возвращает только одну запись, которая содержит Smith:
ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ Фамилия ОТ сотрудников;
Если вы опустите DISTINCT, этот запрос вернет обе записи Смита. Если предложение SELECT содержит более одного поля, комбинация значений из всех полей должна быть уникальной, чтобы данная запись была включена в результаты.Вывод запроса, использующего DISTINCT, не обновляется и не отражает последующих изменений, внесенных другими пользователями.
DISTINCTROW : пропускает данные, основанные на полностью повторяющихся записях, а не только на повторяющихся полях. Например, вы можете создать запрос, который объединяет таблицы Customers и Orders в поле CustomerID. В таблице «Клиенты» нет повторяющихся полей «Идентификатор клиента», в отличие от таблицы «Заказы», поскольку у каждого клиента может быть много заказов. Следующий оператор SQL показывает, как можно использовать DISTINCTROW для создания списка компаний, у которых есть хотя бы один заказ, но без каких-либо подробностей об этих заказах:
ВЫБРАТЬ DISTINCTROW CompanyName ОТ Клиентов ВНУТРЕННИЕ ПРИСОЕДИНЕНИЯ Заказы ПО Клиенты.CustomerID = Orders.CustomerID ЗАКАЗАТЬ ПО CompanyName;
Если вы опустите DISTINCTROW, этот запрос создаст несколько строк для каждой компании, у которой есть более одного заказа. DISTINCTROW действует только тогда, когда вы выбираете поля из некоторых, но не из всех таблиц, используемых в запросе. DISTINCTROW игнорируется, если ваш запрос включает только одну таблицу или если вы выводите поля из всех таблиц.
TOP n [PERCENT] : возвращает определенное количество записей, которые попадают в верхнюю или нижнюю часть диапазона, указанного в предложении ORDER BY.Предположим, вам нужны имена 25 лучших студентов из класса 1994 года:
ВЫБРАТЬ ТОП 25 Имя Фамилия ОТ студентов ГДЕ GraduationYear = 1994 ЗАКАЗАТЬ ПО GradePointAverage DESC;
Если вы не включите предложение ORDER BY, запрос вернет произвольный набор из 25 записей из таблицы «Студенты», удовлетворяющий условию WHERE. Предикат TOP не выбирает между равными значениями. В предыдущем примере, если средние двадцать пятый и двадцать шестой наивысший балл совпадают, запрос вернет 26 записей.Вы также можете использовать зарезервированное слово PERCENT, чтобы вернуть определенный процент записей, которые попадают в верхнюю или нижнюю часть диапазона, указанного в предложении ORDER BY. Предположим, что вместо 25 лучших студентов вам нужны 10 процентов самых бедных учеников класса:
ВЫБРАТЬ ТОП 10 ПРОЦЕНТОВ Имя Фамилия ОТ студентов ГДЕ GraduationYear = 1994 ЗАКАЗАТЬ ПО GradePointAverage ASC;
Предикат ASC определяет возврат нижних значений. Значение, следующее за TOP, должно быть целым числом без знака .TOP не влияет на возможность обновления запроса.
таблица : имя таблицы, из которой извлекаются записи.
Пример
В этом примере создается запрос, который объединяет таблицы Customers и Orders в поле CustomerID. В таблице «Клиенты» нет повторяющихся полей «Идентификатор клиента», в отличие от таблицы «Заказы», поскольку у каждого клиента может быть много заказов. Использование DISTINCTROW позволяет получить список компаний, у которых есть хотя бы один заказ, но без каких-либо подробностей об этих заказах.
Sub AllDistinctX ()
Dim dbs как база данных, сначала как набор записей
'Измените эту строку, чтобы включить путь к Northwind
' на твоем компьютере.
Установите dbs = OpenDatabase ("Northwind.mdb")
'Присоединяйтесь к таблицам клиентов и заказов на
Поле CustomerID. Выберите список компаний
'которые имеют хотя бы один заказ.
Установите rst = dbs.OpenRecordset ("ВЫБРАТЬ DISTINCTROW" _
& "Название компании ОТ клиентов" _
& "Заказы INNER JOIN" _
& "ПО Клиентам.CustomerID = "_
& "Orders.CustomerID" _
& "ЗАКАЗАТЬ ПО КОМПАНИИ;")
'Заполните набор записей.
rst.MoveLast
'Вызов EnumFields для печати содержимого
'Набор записей. Передайте объект Recordset и желаемый
ширина поля.
EnumFields первая, 25
dbs.Close
Конец подписки
См. Также
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
.
sql — Выберите отдельные и неотличимые значения столбца
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира
.