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

基于给定数据表,如何编写SQL查询找出最受读者欢迎的作者?

如何通过SQL查询最受读者欢迎的作者信息?

要找出最受读者欢迎的作者,核心思路是统计每个作者的书籍被借阅的总次数,然后按借阅次数从高到低排序。结合你提供的两张数据表,我来一步步拆解实现方案:

先明确表关联逻辑

假设你提到的两张表分别命名为:

  • book_catalog:包含书目基础信息(BibNum、Author、Title等)
  • checkout_records:包含借阅记录(BibNum、CheckoutDateTime等)
    两张表通过BibNum字段关联(这里默认BibNum是书目编号——如果实际是读者账号的话,可能需要重新确认关联逻辑,因为这样无法直接关联到作者信息)。

基础查询语句(Top N受欢迎作者)

下面是最基础的实现,会统计每个作者的总借阅次数,并返回排名靠前的作者:

SELECT
    bc.Author,
    COUNT(cr.CheckoutDateTime) AS total_checkouts
FROM
    book_catalog bc
INNER JOIN
    checkout_records cr ON bc.BibNum = cr.BibNum
GROUP BY
    bc.Author
ORDER BY
    total_checkouts DESC
LIMIT 10; -- 这里可以修改数字,比如取Top5或Top20

语句细节解释

  • INNER JOIN:只保留有对应借阅记录的书目,确保我们统计的是真正被读者借阅过的作者
  • COUNT(cr.CheckoutDateTime):统计每个作者对应的有效借阅次数(用CheckoutDateTime而非*是为了排除可能的NULL记录,比如未完成的借阅)
  • GROUP BY bc.Author:按作者分组,让聚合函数COUNT能计算每个作者的总借阅量
  • ORDER BY total_checkouts DESC:按借阅次数从高到低排序,让最受欢迎的作者排在前面
  • LIMIT:控制返回的作者数量,按需调整即可

处理特殊场景

如果遇到作者名称格式不统一的问题(比如同一作者被记录为"J.K. Rowling"和"JK Rowling"),可以先清洗作者名称再统计:

SELECT
    -- 去除点号并修剪空格,统一作者名称格式
    TRIM(REPLACE(bc.Author, '.', '')) AS cleaned_author,
    COUNT(cr.CheckoutDateTime) AS total_checkouts
FROM
    book_catalog bc
INNER JOIN
    checkout_records cr ON bc.BibNum = cr.BibNum
GROUP BY
    cleaned_author
ORDER BY
    total_checkouts DESC
LIMIT 10;

如果需要包含从未被借阅过的作者(虽然需求是找最受欢迎的,但可以作为扩展),可以把INNER JOIN换成LEFT JOIN,并调整统计逻辑:

SELECT
    bc.Author,
    COUNT(cr.CheckoutDateTime) AS total_checkouts
FROM
    book_catalog bc
LEFT JOIN
    checkout_records cr ON bc.BibNum = cr.BibNum
GROUP BY
    bc.Author
ORDER BY
    total_checkouts DESC;

这种情况下,未被借阅的作者总次数会显示为0,排在列表末尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:01:06