如何用MySQL查询2017年书籍借阅量Top5的作者?
解决2017年借阅量Top5作者查询问题
错误码1140的原因
错误码1140通常是因为MySQL开启了ONLY_FULL_GROUP_BY模式,此时SELECT语句中出现的非聚合列必须全部包含在GROUP BY子句中,否则会触发该错误。
正确的SQL实现
兼容ONLY_FULL_GROUP_BY的写法
这种写法适用于严格模式,可避免报错:
SELECT a.AuthorFirstName, a.AuthorLastName, COUNT(bw.borrowid) AS borrow_count FROM author a JOIN book b ON a.AuthorID = b.bookauthor JOIN borrower bw ON b.bookid = bw.bookid WHERE YEAR(bw.borrowdate) = 2017 GROUP BY a.AuthorID, a.AuthorFirstName, a.AuthorLastName ORDER BY borrow_count DESC LIMIT 5;
简化写法(关闭ONLY_FULL_GROUP_BY时可用)
如果你的MySQL未开启严格模式,可简化GROUP BY子句(因同一AuthorID对应的姓名唯一):
SELECT a.AuthorFirstName, a.AuthorLastName, COUNT(bw.borrowid) AS borrow_count FROM author a JOIN book b ON a.AuthorID = b.bookauthor JOIN borrower bw ON b.bookid = bw.bookid WHERE YEAR(bw.borrowdate) = 2017 GROUP BY a.AuthorID ORDER BY borrow_count DESC LIMIT 5;
逻辑说明
- 表关联:通过
author与book的外键AuthorID/bookauthor关联,再通过book与borrower的外键bookid关联,串联作者、书籍、借阅记录。 - 年份筛选:用
YEAR(bw.borrowdate) = 2017过滤出2017年的借阅记录。 - 分组统计:按作者唯一标识
AuthorID(及姓名以兼容严格模式)分组,用COUNT(bw.borrowid)统计每个作者的书籍被借阅次数。 - 排序取Top5:按借阅次数降序排序,用
LIMIT 5获取前5位作者。
注意事项
- 若同一本书被多次借阅,
COUNT(bw.borrowid)会正确统计所有借阅次数。 - 若某个作者有多本书,语句会自动累加其所有书籍的借阅次数。
内容的提问来源于stack exchange,提问作者SasuKev
相关产品推荐
相关产品推荐

