Pergunta

Em postgres Estou bastante certo de que você pode fazer algo como isto

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

Essencialmente, neste exemplo, eu gostaria de retornar uma lista de autores e quantos livros cada tem escrito .... na mesma consulta.

Isso é possível? Eu suspeito que esta abordagem é bastante ingênuo ..

Obrigado:)

Foi útil?

Solução

Bem, para uma coisa, ele retorna um produto cartesiano de todos os autores a todos os livros, independentemente de que o autor escreveu esse livro.

Aqui está como eu ia escrever uma consulta para obter o resultado que você diz que você quer:

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;

Você precisa aprender a escrever consultas de junção se você usar SQL. A junção é SQL que o loop é a linguagens de programação de aplicativos. Ou seja, é uma construção de programação fundamental que você precisa saber.

Outras dicas

Que tal usar uma junção:

SELECT authors.stage_name, count(*) 
FROM authors INNER JOIN books on books.author_id = authors.id
GROUP BY authors.stage_name
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top