Вопрос

В postgres я почти уверен, что вы можете сделать что-то подобное

SELECT
  authors.stage_name, 
  count(select id from books where books.author_id  = authors.id) 
FROM
  authors,
  books;

По сути, в этом примере я хотел бы вернуть список авторов и количество книг, написанных каждым из них....в том же запросе.

Возможно ли это?Я подозреваю, что такой подход довольно наивен..

Спасибо :)

Это было полезно?

Решение

Ну, во-первых, он возвращает декартово произведение всех авторов для всех книг, независимо от того, написал ли этот автор эту книгу.

Вот как я бы написал запрос, чтобы получить желаемый результат, о котором вы говорите:

SELECT a.stage_name, COUNT(b.id)
FROM authors a
  LEFT OUTER JOIN books b ON (a.id = b.author_id)
GROUP BY a.id;

Вам нужно научиться писать запросы объединения, если вы используете SQL.Соединение для SQL - это то же самое, что цикл для языков прикладного программирования.То есть.это фундаментальная программная конструкция, которую вам нужно знать.

Другие советы

Как насчет использования соединения:

SELECT authors.stage_name, count(*) 
FROM authors INNER JOIN books on books.author_id = authors.id
GROUP BY authors.stage_name
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top