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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以优化的方式在子查询中选择COUNT相关的知识,希望对你有一定的参考价值。

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

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

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

感谢您的关注。

答案

您可以使用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

以上是关于如何以优化的方式在子查询中选择COUNT的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句优化

如何在子查询 SQL Server 中选择多个项目

选择 Count (distinct col) 查询以显示结果中的行数和列数 - postgresql

在子查询中使用多个表

谈谈如何优化MYSQL数据库查询

如何优化 SQL 查询以计算词频?