You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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;

逻辑说明

  1. 表关联:通过author与book的外键AuthorID/bookauthor关联,再通过book与borrower的外键bookid关联,串联作者、书籍、借阅记录。
  2. 年份筛选:用YEAR(bw.borrowdate) = 2017过滤出2017年的借阅记录。
  3. 分组统计:按作者唯一标识AuthorID(及姓名以兼容严格模式)分组,用COUNT(bw.borrowid)统计每个作者的书籍被借阅次数。
  4. 排序取Top5:按借阅次数降序排序,用LIMIT 5获取前5位作者。

注意事项

  • 若同一本书被多次借阅,COUNT(bw.borrowid)会正确统计所有借阅次数。
  • 若某个作者有多本书,语句会自动累加其所有书籍的借阅次数。

内容的提问来源于stack exchange,提问作者SasuKev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:50:51