• Иллюстрированный самоучитель по PostgreSQL

    Представления. Другие возможности SQL.

    Вспомните, о чем говорилось выше в этой главе, – при группировке по полю title функция count() подсчитывает количество записей в каждой группе (в данном случае – для каждого названия книги). Наконец, для поля ship_date таблицы shipments вызывается функция max(), чтобы в результатах запроса выводилась дата последней поставки по каждой книге и количество экземпляров:

    booktown=# SELECT count(*) AS num_shipped, max(ship_date), title
    booktown-# FROM shipments
    booktown-# JOIN editions USING (isbn)
    booktown-# NATURAL JOIN books AS b (book_id)
    booktown-# GROUP BY b.title
    booktown-# ORDER BY num_shipped DESC;
    num_shipped | max | title
    5 | 2001-08-13 09:47:04-07 | The Cat in the Hat
    5 | 2001-08-14 13:45:51-07 | The Shining
    4 | 2001-08-11 09:55:05-07 | Bartholomew and the Oobleck
    3 | 2001-08-14 13:49:00-07 | Franklin in the Dark
    3 | 2001-08-15 11:57:40-07 | Goodnight Moon
    3 | 2001-08-14 13:41:39-07 | The Tell-Tale Heart
    2 | 2001-08-15 14:02:01-07 | 2001: A Space Odyssey
    2 | 2001-08-14 08:42:58-07 | Dune
    2 | 2001-08-07 13:00:48-07 | Little Women
    2 | 2001-08-09 09:30:46-07 | The Velveteen Rabbit
    1 | 2001-08-14 07:33:47-07 | Dynamic Anatomy
    (11 rows)
    

    Запрос выдает полезную информацию, но синтаксис получается слишком громоздким, и часто вводить его вручную нежелательно. В листинге 4.62 показано, как на базе этого запроса создать представление командой CREATE VIEW.

    Листинг 4.62. Создание представления.

    booktown=# CREATE VIEW recent_shipments
    booktown-# AS SELECT count(*) AS num_shipped, max(ship_date), title
    booktown-# FROM shipments
    booktown-# JOIN editions USING (isbn)
    booktown-# NATURAL JOIN books AS b (book_id)
    booktown-# GROUP BY b.title
    booktown-# ORDER BY num_shipped DESC;
    CREATE
    

    Ответ сервера CREATE подтверждает, что представление было успешно создано. В результате в базе данных booktown создается представление recent_shipments с информацией обо всех поставках книг, о количестве заказанных экземпляров и дате последней поставки по каждой позиции.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.