mysql - incorporar contagem de consulta dentro de outra consulta
-
21-08-2019 - |
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:)
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