如何以优化的方式在子查询中选择COUNT

时间:2017-12-23 07:21:31

标签: mysql database subquery

我在mysql数据库中有关于在子查询中计数的问题。假设我有一个book表,其中包含author_idauthoridname。我想获得作者列表,其中包含每位作者的书籍数量。所以我使用这个查询:

SELECT a.id as id, a.name as name,
(SELECT COUNT(*) FROM book b WHERE b.author_id = a.id) as count
From author a

这没有任何问题。但我想知道,此解决方案是否是此类示例的最佳解决方案?如果没有,是否有更好的解决方法可以解决这些问题?

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

您可以使用joingroup by,因为在计算每位作者撰写的图书数量时,您需要汇总数据。

SELECT a.id AS id, a.name AS name, count(b.id) AS `count` FROM author a
LEFT JOIN BOOK b ON b.author_id = a.id
GROUP BY a.id, a.name;

如果不是所有作者都在书表中有书籍,那么使用left join会更好,否则inner join将是最佳的INNER JOIN vs LEFT JOIN performance in SQL Server