Select distinct from (dmx)

Example — Finding Unique Values in a Column

Let’s look at how to use the DISTINCT clause to find the unique values within one column in a table.


In this example, we have a table called suppliers with the following data:

supplier_id supplier_name city state
100 Microsoft Redmond Washington
200 Mountain View California
300 Oracle Redwood City California
400 Kimberly-Clark Irving Texas
500 Tyson Foods Springdale Arkansas
600 SC Johnson Racine Wisconsin
700 Dole Food Company Westlake Village California
800 Flowers Foods Thomasville Georgia
900 Electronic Arts Redwood City California

Let’s find all of the unique states in the suppliers table. Enter the following SQL statement:

Try It

SELECT DISTINCT state
FROM suppliers
ORDER BY state;

There will be 6 records selected. These are the results that you should see:

state
Arkansas
California
Georgia
Texas
Washington
Wisconsin

Пример — DISTINCT ON

Одна вещь, которая уникальна в PostgreSQL, по сравнению с другими базами данных, заключается в том, что у вас есть еще одна опция при использовании оператора DISTINCT, которая называется DISTINCT ON. DISTINCT ON вернет только первую строку для DISTINCT ON (diver_expressions) на основе оператора ORDER BY, предоставленного в запросе. Любые другие поля, перечисленные в операторе SELECT, будут возвращены для этой первой строки. Это похоже на выполнение LIMIT в 1 для каждой комбинации DISTINCT ON (Different_expressions). Давайте подробнее рассмотрим, как использовать DISTINCT ON в операторе DISTINCT и что он возвращает. Таким образом, мы могли бы изменить пример выше :

PgSQL

SELECT DISTINCT ON (last_name) last_name, city, state FROM contacts ORDER BY last_name, city, state;

1 2 3

SELECTDISTINCTON(last_name)last_name,city,state

FROMcontacts

ORDERBYlast_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 после того, как он выбрал возвращеные записи.

Булевы операторы и простые операторы сравнения

AND логическое И. Ставится между двумя условиями (условие1 AND условие2). Чтобы выражение вернуло True, нужно, чтобы истинными были оба условия
OR логическое ИЛИ. Ставится между двумя условиями (условие1 OR условие2). Чтобы выражение вернуло True, достаточно, чтобы истинным было только одно условие
NOT инвертирует условие/логическое_выражение. Накладывается на другое выражение (NOT логическое_выражение) и возвращает True, если логическое_выражение = False и возвращает False, если логическое_выражение = True
Условие Значение
= Равно
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно
<> != Не равно
IS NULL Проверка на равенство NULL
IS NOT NULL Проверка на неравенство NULL

ПримерExample

Приведенная ниже формула подсчитывает количество уникальных клиентов, разместивших заказы через Интернет.The following formula counts the number of unique customers who have generated orders over the internet channel. В таблице далее показаны возможные результаты при добавлении формулы в сводную таблицу.The table that follows illustrates the possible results when the formula is added to a PivotTable.

Список значений, которые возвращает функция DISTINCT, нельзя вставить непосредственно в столбец.You cannot paste the list of values that DISTINCT returns directly into a column. Вместо этого результаты функции DISTINCT необходимо передать в другую функцию, которая подсчитывает, фильтрует или суммирует значения из списка.Instead, you pass the results of the DISTINCT function to another function that counts, filters, or aggregates values by using the list. Чтобы максимально упростить пример, в этом случае таблица с уникальными значениями была передана в функцию COUNTROWS.To make the example as simple as possible, here the table of distinct values has been passed to the COUNTROWS function.

Уникальные интернет-заказчикиUnique Internet customers Метки столбцовColumn Labels
Метки строкRow Labels AccessoriesAccessories BikesBikes ClothingClothing Grand TotalGrand Total
20052005 10131013 10131013
20062006 26772677 26772677
2007 г.2007 67926792 4 8754875 28672867 9 3099309
20082008 9 4359435 54515451 41964196 1137711377
Grand TotalGrand Total 15 11415114 91329132 6 8526852 1848418484

Кроме того, обратите внимание, что результаты не являются аддитивными.Also, note that the results are not additive. То есть общее число уникальных клиентов в 2007 году не является суммой уникальных клиентов по категориям Accessories, Bikes и Clothing в этом году.That is to say, the total number of unique customers in 2007 is not the sum of unique customers of Accessories, Bikes and Clothing for that year

Причина в том, что один и тот же клиент может быть учтен в нескольких категориях.The reason is that a customer can be counted in multiple groups.

Пример — поиск уникальных значений в столбце

Давайте посмотрим, как использовать оператор DISTINCT для поиска уникальных значений в одном столбце таблицы.

В этом примере у нас есть таблица suppliers со следующими данными:

supplier_id supplier_name city state
100 Yandex Moscow Russia
200 Lansing Michigan
300 Oracle Redwood City California
400 Bing Redmond Washington
500 Yahoo Sunnyvale Washington
600 DuckDuckGo Paoli Pennsylvania
700 Qwant Paris Ile de France
800 Menlo Park California
900 Electronic Arts San Francisco California

Давайте найдем все уникальные значения в таблице suppliers. Введите следующий SQL оператор:

PgSQL

SELECT DISTINCT state FROM suppliers ORDER BY state;

1 2 3

SELECTDISTINCTstate

FROMsuppliers

ORDERBYstate;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить:

state
Russia
Ile de France
Pennsylvania
California
Washington
Michigan

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

Примечание

  • Если в DISTINCT указано только одно выражение, запрос возвратит уникальные значения для этого выражения.
  • Если в DISTINCT указано несколько выражений, запрос извлекает уникальные комбинации для перечисленных выражений.
  • Если заданы ключевые слова DISTINCT ON, запрос возвратит уникальные значения для Different_expressions и вернет другие поля для выбранных записей на основе предложения ORDER BY (limit 1).
  • В PostgreSQL DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем операторе SQL ваш результирующий набор будет содержать значение NULL как отдельное значение.

ПримерыExamples

В этом разделе приведены примеры запросов XQuery к экземплярам XML, хранящимся в различных столбцах типа XML в базе данных AdventureWorks.This topic provides XQuery examples against XML instances that are stored in various xml type columns in the AdventureWorks database.

В этом примере экземпляр XML, содержащий телефонные номера, назначается переменной типа XML .In this example, an XML instance that contains telephone numbers is assigned to an xml type variable. В языке XQuery, указанном для этой переменной, используется функция distinct-values () для компиляции списка телефонных номеров, которые не содержат дубликатов.The XQuery specified against this variable uses the distinct-values() function to compile a list of telephone numbers that do not contain duplicates.

Результат:This is the result:

В следующем запросе в функцию distinct-values () передается последовательность чисел (1, 1, 2).In the following query, a sequence of numbers (1, 1, 2) is passed in to the distinct-values() function. Функция удаляет из последовательности дублирующееся значение и возвращает два оставшихся.The function then removes the duplicate in the sequence and returns the other two.

Запрос возвращает 1 2.The query returns 1 2.

Ограничения реализацииImplementation Limitations

Существуют следующие ограничения:These are the limitations:

  • Функция distinct-values () сопоставляет целочисленные значения с типом xs: Decimal.The distinct-values() function maps integer values to xs:decimal.

  • Функция distinct-values () поддерживает только упомянутые выше типы и не поддерживает смесь базовых типов.The distinct-values() function only supports the previously mentioned types and does not support the mixture of base types.


  • Функция distinct-values () для значений xs: Duration не поддерживается.The distinct-values() function on xs:duration values is not supported.

  • Синтаксический параметр для указания параметров сортировки не поддерживается.The syntactic option that provides a collation is not supported.

PostgreSQL SELECT DISTINCT examples

Let’s create a new table called and insert data into it for practicing the  clause.

Note that you will learn how to create a table and insert data into a table in the subsequent tutorial. In this tutorial, you just execute the statement in psql or pgAdmin to execute the statements.

First, use the following statement to create the  table that consists of three columns: , and .

Second, insert some rows into the table using the following  statement:

Third, query the data from the table using the statement:

PostgreSQL one column example

The following statement selects unique values in the   column from the table and sorts the result set in alphabetical order by using the clause.

PostgreSQL multiple columns

The following statement demonstrates how to use the  clause on multiple columns:

Because we specified both and columns in the clause, PostgreSQL combined the values in both and columns to evaluate the uniqueness of the rows.

The query returns the unique combination of and from the  table. Notice that the table has two rows with value in both   and   columns. When we applied the  to both columns, one row was removed from the result set because it is the duplicate.

PostgreSQL example

The following statement sorts the result set by the   and  , and then for each group of duplicates, it keeps the first row in the returned result set.

Here is the output:

In this tutorial, you have learned how to use PostgreSQL statement to remove duplicate rows returned by a query.

  • Was this tutorial helpful ?

Аргументы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.

Syntax

The syntax of the DISTINCT keyword is as follows:

You can simply add the word DISTINCT after your SELECT keyword.

You can also add the DISTINCT keyword inside aggregate functions:

We’ll see some examples of this below.

Invalid DISTINCT Syntax

One way I’ve seen DISTINCT being used is in the middle of a SELECT statement.

For example:

Perhaps the user is trying to show unique values of a particular column.

Because the DISTINCT keyword applies to the entire result set, and not just one column, the DISTINCT must go at the start of the query, just after SELECT:

I’ll show an example of this later in the guide.

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

Пример — как DISTINCT обрабатывает значения NULL

Наконец, считает ли оператор DISTINCT NULL уникальным значением в SQL? Ответ — да. Давайте рассмотрим это дальше.


В этом примере у нас есть таблица products со следующими данными:

product_id product_name category_id
1 Pear 50
2 Banana 50
3 Orange 50
4 Apple 50
5 Bread 75
6 Sliced Ham 25
7 Kleenex NULL

Теперь давайте выберем уникальные значения из поля category_id, которое содержит значение NULL. Введите следующий запрос SQL:

PgSQL

SELECT DISTINCT category_id FROM products ORDER BY category_id;

1 2 3

SELECTDISTINCTcategory_id

FROMproducts

ORDERBYcategory_id;

Будет выбрано 4 записи. Вот результаты, которые вы должны получить:

category_id
NULL
25
50
75

В этом примере запрос вернет уникальные значения, найденные в столбце category_id. Как видно из первой строки в наборе результатов, NULL — это уникальное значение, которое возвращается оператором DISTINCT.

Шаг 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 таким мощным.

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

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

SQL Count Function

We use SQL Count aggregate function to get the number of rows in the output. Suppose we have a product table that holds records for all products sold by a company. We want to know the count of products sold during the last quarter. We can use SQL Count Function to return the number of rows in the specified condition.

The syntax of the SQL COUNT function: COUNT ( expression);

By default, SQL Server Count Function uses All keyword. It means that SQL Server counts all records in a table. It also includes the rows having duplicate values as well.

Let’s create a sample table and insert few records in it.

1 2 3 4 5 6 7

CREATETABLE##TestTable (Idintidentity(1,1),Col1char(1)NULL);

INSERTINTO##TestTableVALUES(‘A’);

INSERTINTO##TestTableVALUES(‘A’);

INSERTINTO##TestTableVALUES(‘B’);

INSERTINTO##TestTableVALUES(‘B’);

INSERTINTO##TestTableVALUES(NULL);

INSERTINTO##TestTableVALUES(NULL);

In this table, we have duplicate values and NULL values as well.

In the following screenshot, we can note that:

  • Count (*) includes duplicate values as well as NULL values
  • Count (Col1) includes duplicate values but does not include NULL values

Suppose we want to know the distinct values available in the table. We can use SQL COUNT DISTINCT to do so.

1 2

Selectcount(DISTINCTCOL1)

from##TestTable

In the following output, we get only 2 rows. SQL COUNT Distinct does not eliminate duplicate and NULL values from the result set.

Let’s look at another example. In this example, we have a location table that consists of two columns City and State.

1 2 3 4 5 6 7 8 9

CREATETABLELocation

(CityVARCHAR(30),

StateVARCHAR(20)

);

Insertintolocationvalues(‘Gurgaon’,’Haryana’)

Insertintolocationvalues(‘Gurgaon’,’Rajasthan’)

Insertintolocationvalues(‘Jaipur’,’Rajasthan’)

Insertintolocationvalues(‘Jaipur’,’Haryana’)

Now, execute the following query to find out a count of the distinct city from the table.

1 2

SELECTCOUNT(DISTINCT(City))

FROMLocation;

It returns the count of unique city count 2 (Gurgaon and Jaipur) from our result set.

If we look at the data, we have similar city name present in a different state as well. The combination of city and state is unique, and we do not want that unique combination to be eliminated from the output.

We can use SQL DISTINCT function on a combination of columns as well. It checks for the combination of values and removes if the combination is not unique.

1 2

SELECTDISTINCTCity,State

FROMLocation;

It does not remove the duplicate city names from the output because of a unique combination of values.

Let’s insert one more rows in the location table.

1 Insertintolocationvalues(‘Gurgaon’,’Haryana’)

We have 5 records in the location table. In the data, you can see we have one combination of city and state that is not unique.

Rerun the SELECT DISTINCT function, and it should return only 4 rows this time.

We cannot use SQL COUNT DISTINCT function directly with the multiple columns. You get the following error message.

We can use a temporary table to get records from the SQL DISTINCT function and then use count(*) to check the row counts.

1 2 3 4

SELECTDISTINCTCity,State

into#Temp

FROMLocation;

Selectcount(*)from#Temp

We get the row count 4 in the output.

If we use a combination of columns to get distinct values and any of the columns contain NULL values, it also becomes a unique combination for the SQL Server.

To verify this, let’s insert more records in the location table. We did not specify any state in this query.

1 2

Insertintolocationvalues(‘Gurgaon’,»)

Insertintolocation(city)values(‘Gurgaon’)

Let’s look at the location table data.

Re-run the query to get distinct rows from the location table.

1 2

SELECTdistinctCity,State

FROMLocation;

In the output, we can see it does not eliminate the combination of City and State with the blank or NULL values.

Similarly, you can see row count 6 with SQL COUNT DISTINCT function.

Introduction to PostgreSQL SELECT DISTINCT clause

The clause is used in the statement to remove duplicate rows from a result set. The clause keeps one row for each group of duplicates. The clause can be applied to one or more columns in the select list of the statement.

The following illustrates the syntax of the  clause:

In this statement, the values in the column are used to evaluate the duplicate.

If you specify multiple columns, the clause will evaluate the duplicate based on the combination of values of these columns.

In this case, the combination of values in both and columns will be used for evaluating the duplicate.

PostgreSQL also provides the  to keep the “first” row of each group of duplicates using the following syntax:

The order of rows returned from the statement is unspecified therefore the “first” row of each group of the duplicate is also unspecified.

It is a good practice to always use the clause with the  to make the result set predictable.

Notice that the expression must match the leftmost expression in the clause.

Пример дискретизированного столбцаDiscretized Column Example

Следующий образец кода возвращает среднее, максимальное и минимальное значения для каждого сегмента, созданного алгоритмом для столбца [.The following code sample returns the midpoint, maximum, and minimum values for each bucket that has been created by the algorithm for the column, [. Чтобы воспроизвести результаты этого примера, потребуется создать новую структуру интеллектуального анализа данных, аналогичную .To reproduce the results for this example, you must create a new mining structure that is the same as . В мастере измените тип содержимого столбца с непрерывного на Дискретный.In the wizard, change the content type of the column from Continuous to Discretized.


Примечание

Можно также изменить модель интеллектуального анализа данных, созданную в учебнике по основам интеллектуального анализа данных, чтобы дискретизировать столбец структуры интеллектуального анализа данных [.You can also change the mining model created in the Basic Mining Tutorial to discretize the mining structure column, [. Сведения о том, как это сделать, см. в разделе изменение дискретизации столбца в модели интеллектуального анализа данных.For information about how to do this, see Change the Discretization of a Column in a Mining Model. Однако изменение дискретизации столбца повлечет за собой повторную обработку структуры интеллектуального анализа данных; в итоге изменятся результаты других моделей, построенных с использованием этой структуры.However, when you change the discretization of the column, it will force the mining structure to be reprocessed, which will change the results of other models that you have built using that structure.

Пример результатов:Example results:

Bucket AverageBucket Average Bucket MinimumBucket Minimum Bucket MaximumBucket Maximum
24610,724610.7 1000010000 39221,4139221.41
55115,7355115.73 39221,4139221.41 71010,0571010.05
84821,5484821.54 71010,0571010.05 98633,0498633.04
111633,9111633.9 98633,0498633.04 124634,7124634.7
147317,4147317.4 124634,7124634.7 170000170000

Видно, что значения столбца дискретизированы на пять сегментов. Кроме того, имеется дополнительная строка значений NULL, представляющая недостающие значения.You can see that the values of the column have been discretized into five buckets, plus an additional row of null values, to represent missing values.

Количество десятичных разрядов в результатах зависит от клиента, использованного для выполнения запроса.The number of decimal places in the results depends on the client that you use for querying. Здесь они были округлены до двух десятичных разрядов, с одной стороны — для простоты, а с другой — чтобы отразить значения, показанные в среде SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).Here they have been rounded to two decimal places, both for simplicity and to reflect the values that are displayed in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).

К примеру, если при просмотре модели с помощью средства просмотра дерева решений щелкнуть узел, содержащий сгруппированных по показателю дохода клиентов, во всплывающей подсказке отобразятся следующие свойства узла:For example, if you browse the model by using the Decision Tree viewer and click a node that contains customers grouped by income, the following node properties are displayed in the Tooltip:

Возраст >= 69 и годовой доход < 39221,41Age >=69 AND Yearly Income < 39221.41

Примечание

Минимальное значение минимального сегмента и максимальное значение максимального сегмента представляют собой самое высокое и самое низкое наблюдаемое значение.The minimum value of the minimum bucket and the maximum value of the maximum bucket are just the highest and lowest observed values. Предполагается, что все значения, остающиеся за пределами этого наблюдаемого диапазона, принадлежат минимальному и максимальному сегментам.Any values that fall outside this observed range are assumed to belong to the minimum and maximum buckets.

Вывод данных из таблицы MySQL с помощью PHP (PDO)

Иногда вывод большого количества данных в терминале может быть неудобен или даже не читаем, в таком случае будет лучше вывести данные таблицы на веб-странице с помощью PHP, используя модуль PDO.

Создадим файл c HTML-таблицей, ячейки которой будут заполнятся данными из таблицы books.

<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>SELECT</title> <style> td:nth-child(5),td:nth-child(6){text-align:center;} table{border-spacing: 0;border-collapse: collapse;} td, th{padding: 10px;border: 1px solid black;} </style> </head> <body> <?php $db_server = «localhost»; $db_user = «root»; $db_password = «MySafePass4!»; $db_name = «Bookstore»;

try { // Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль, // также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд. $db = new PDO(«mysql:host=$db_server;dbname=$db_name», $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>»SET NAMES utf8″)); // Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения) $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Запрос на вывод записей из таблицы $sql = «SELECT id, title, author, price, discount, amount FROM books»; // Подготовка запроса $statement = $db->prepare($sql); // Выполняем запрос $statement->execute(); // Получаем массив строк $result_array = $statement->fetchAll();

echo «<table><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Amount</th></tr>»; foreach ($result_array as $result_row) { echo «<tr>»; echo «<td>» . $result_row . «</td>»; echo «<td>» . $result_row . «</td>»; echo «<td>» . $result_row . «</td>»; echo «<td>» . $result_row . «</td>»; echo «<td>» . $result_row . «</td>»; echo «<td>» . $result_row . «</td>»; echo «</tr>»; } echo «</table>»; }

catch(PDOException $e) { echo «Ошибка при создании записи в базе данных: » . $e->getMessage(); } // Закрываем соединение $db = null; ?> </body> </html>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

<!DOCTYPE html>

<html>

<head>

<meta charset=»UTF-8″>

<title>SELECT<title>

<style>

td:nth-child(5),td:nth-child(6){text-aligncenter;}

table{border-spacing;border-collapsecollapse;}

td, th{padding10px;border1pxsolidblack;}

</style>

<head>

<body>

<?php

$db_server=»localhost»;

$db_user=»root»;

$db_password=»MySafePass4!»;

$db_name=»Bookstore»;

try{

// Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль,

// также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд.

$db=newPDO(«mysql:host=$db_server;dbname=$db_name»,$db_user,$db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>»SET NAMES utf8″));

// Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения)

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Запрос на вывод записей из таблицы

$sql=»SELECT id, title, author, price, discount, amount FROM books»;

// Подготовка запроса

$statement=$db->prepare($sql);

// Выполняем запрос

$statement->execute();

// Получаем массив строк

$result_array=$statement->fetchAll();

echo»<table><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Amount</th></tr>»;

foreach($result_arrayas$result_row){

echo»<tr>»;

echo»<td>».$result_row»id».»</td>»;

echo»<td>».$result_row»title».»</td>»;

echo»<td>».$result_row»author».»</td>»;

echo»<td>».$result_row»price».»</td>»;

echo»<td>».$result_row»discount».»</td>»;

echo»<td>».$result_row»amount».»</td>»;

echo»</tr>»;

}

echo»</table>»;

}  

catch(PDOException$e){

echo»Ошибка при создании записи в базе данных: «.$e->getMessage();

}

// Закрываем соединение

$db=null;

?>

<body>

<html>

Результат заполнения HTML-таблицы данными из таблицы books.

Результат вывода данных из таблицы MySQL при помощи PHP

Вывод данных из нескольких таблиц

Если у вас есть несколько связанных таблиц, то с помощью вы можете выводить их данные составляя из них одну таблицу.

Например мы имеем таблицу с книгами — books и их заказами — orders.

Выведем колонки id, book_id и status для таблицы orders.

Имея идентификаторы записей таблицы books в колонке book_id, мы можем соотнести их с колонкой id в таблице books с помощью команды . В результате мы можем узнать статус заказа для каждой книги.

Выведем колонки title, author, price из таблицы books и колонку status из таблицы orders.

Вывести колонки с одинаковыми именами, например id, в данном случае не получится, т.к. они имеются в обоих таблицах.


С этим читают