I have two very simple count queries that I would like to join into one.
To clarify the situation I will add the tables I got:
Book
isbn | author |
---|---|
1111 | GB |
2222 | DC |
3333 | RL |
Author
code | Name |
---|---|
GB | George B. |
KL | Kyle L. |
DC | Donald C. |
RL | Roland L. |
Coauthor
name | isbn |
---|---|
KL | 1111 |
GB | 2222 |
GB | 3333 |
And the queries I made: Query 1:
SELECT a.name, count(*) FROM coauthor c INNER JOIN author a ON c.name = a.code GROUP BY a.name
Gives:
name | Count(*) |
---|---|
KL | 1 |
GB | 2 |
Query 2:
SELECT a.name, count(*) FROM author a INNER JOIN book b ON a.code = b.author GROUP BY a.name
Gives:
name | count(*) |
---|---|
GB | 1 |
DC | 1 |
RL | 1 |
And so I would like to get:
name | count(*) |
---|---|
George B. | 3 |
Donald C. | 1 |
Roland L. | 1 |
Kyle L. | 1 |
I have been searching the web, but I guess I don’t know where to start.
Advertisement
Answer
You can join Author
to Book
and Coauthor
with LEFT
joins and aggregate:
SELECT a.code, a.name, COUNT(DISTINCT b.isbn) + COUNT(DISTINCT c.isbn) count FROM Author a LEFT JOIN Book b ON b.author = a.code LEFT JOIN Coauthor c ON c.name = a.code GROUP BY a.code, a.name;
See the demo.