SQLсервер в Linux -самостоятельное освоение пакета

         

Ключевое слово DISTINCT



Листинг 4.31. Ключевое слово DISTINCT

booktown=# SELECT DISTINCT author_id

booktown-# FROM books;

author_id

16

115

1212

1644

1809

1866

2001

2031

4156



7805

7806

15990

25041

(13 rows)

booktown=# SELECT DISTINCT ON (author_id)

booktown-# author_id. title

booktown-# FROM books;

author_id | ntitle

16 | Little Women

115 | The Tell-Tale Heart

1212 | Practical PostgreSQL

1644 | Dynamic Anatomy

1809 | The Cat in the Hat

1866 | Dune

2001 | 2001: A Space Odyssey

2031 | Goodnight Moon

4156 | The Shining

7805 | Programming Python

7806 | Perl Cookbook

15990 |Franklin in the Dark

25041 | The Velveteen Rabbit

(13 rows)

Первый запрос в листинге 4.31 возвращает только 13 записей из таблицы books, хотя таблица содержит 15 записей. Два автора, написавшие по две книги, вошли в итоговый набор лишь в одном экземпляре.

Во втором запросе использована другая форма DISTINCT с явным перечислением полей (или выражений), проверяемых на наличие дубликатов. В этом случае запрос также возвращает 13 записей, поскольку секция ON указывает, что дубликаты проверяются по значению поля author_i d. Без секции ON запрос верн)и бы все 15 записей, поскольку по умолчанию PostgreSQL проверяет полное совпадение всех полей.

В общем случае PostgreSQL выбирает записи, исключаемые из итогового набора при наличии секции ON, по своему усмотрению. Если в запрос вместе с DISTINCT входит секция ORDER BY, вы можете самостоятельно задать порядок выборки полей так, чтобы нужные записи оказались в начале. Сортировка записей рассматривается в подразделе «Сортировка записей».

Если вместо исключения всех дубликатов достаточно сгруппировать записи с повторяющимися значениями некоторого критерия, воспользуйтесь секцией GROUP BY, описанной в подразделе «Группировка записей».



Содержание раздела