2008-12-11 9 views
1

dans Postgres Je suis assez sûr que vous pouvez faire quelque chose comme çamysql - requête de comptage intégré dans une autre requête

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

Essentiellement, dans cet exemple, je voudrais revenir une liste des auteurs et combien de livres chacun a écrit .... dans la même requête.

Est-ce possible? Je soupçonne que cette approche est plutôt naïve ..

Merci :)

Répondre

1

Eh bien, pour une chose, il renvoie un produit cartésien de tous les auteurs de tous les livres , peu importe si cet auteur a écrit ce livre.

Voilà comment j'écrire une requête pour obtenir le résultat que vous dites que vous voulez:

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; 

Vous devez apprendre à écrire les requêtes de jointure si vous utilisez SQL. La jointure est à SQL ce que la boucle est aux langages de programmation d'application. C'est à dire. C'est une structure de programmation fondamentale que vous devez savoir.

0

Que diriez-vous à l'aide d'une jointure:

SELECT authors.stage_name, count(*) 
FROM authors INNER JOIN books on books.author_id = authors.id 
GROUP BY authors.stage_name