ВЫБЕРИТЕ DISTINCT в таблице упорядоченного подзапроса - PullRequest
0 голосов
/ 06 мая 2018

Я работаю над проблемой, связанной с этими двумя таблицами.

               books
isbn    |                  title                  |      author      
------------+-----------------------------------------+------------------
1840918626 | Hogwarts: A History                     | Bathilda Bagshot
3458400871 | Fantastic Beasts and Where to Find Them | Newt Scamander
9136884926 | Advanced Potion-Making                  | Libatius Borage


              transactions
id | patron_id |    isbn    | checked_out_date | checked_in_date 
----+-----------+------------+------------------+-----------------
1 |         1 | 1840918626 | 2012-05-05       | 2012-05-06
2 |         4 | 9136884926 | 2012-05-05       | 2012-05-06
3 |         2 | 3458400871 | 2012-05-05       | 2012-05-06
4 |         3 | 3458400871 | 2018-04-29       | 2018-05-02
5 |         2 | 9136884926 | 2018-05-03       | NULL
6 |         1 | 3458400871 | 2018-05-03       | 2018-05-05
7 |         5 | 3458400871 | 2018-05-05       | NULL

запрос «Составьте список всех названий книг и укажите, была ли извлечена копия этой книги». так что в основном только первая таблица с извлеченным столбцом.

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

это моя ближайшая попытка

SELECT DISTINCT ON (title)
title, checked_out
FROM(
  SELECT b.title, t.checked_in_date IS NULL AS checked_out
  FROM transactions t
  natural join books b
  ORDER BY checked_out DESC
) t;

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

или вы можете присоединиться только к транзакциям, в которых книги не зарегистрированы:

SELECT b.title, t.isbn IS NOT NULL AS checked_out
, t.checked_out_date
FROM books b
LEFT JOIN transactions t ON t.isbn = b.isbn AND t.checked_in_date IS NULL
ORDER BY checked_out DESC
0 голосов
/ 07 мая 2018

Я немного скорректировал вашу попытку. В основном я изменил способ объединения ваших данных

SELECT DISTINCT ON (title)
title, checked_out
FROM(
  SELECT b.title, t.checked_in_date IS NULL AS checked_out
  FROM books b
  LEFT OUTER JOIN transactions t USING (isbn)
  ORDER BY checked_out DESC
) t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...