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

SQL统计借阅频次返回重复值问题排查求助

SQL代码问题分析及解决

问题根源

你的SQL存在三个核心问题:

  • 无关联条件的JOIN导致笛卡尔积:INNER JOIN books b没有指定ON关联子句,数据库会把loan表的每一条记录和books表的每一条记录强制配对,生成的结果行数是loan总行数 × books总行数。
  • GROUP BY逻辑错误:SELECT语句中包含b.isbn和b.title,但GROUP BY仅指定了title,这不符合SQL规范(严格模式下会直接报错),且逻辑上无法按单本书分组。
  • 统计逻辑失效:因为笛卡尔积的存在,每本书的分组里都包含了所有借阅记录的taken字段,所以COUNT(l.taken)会返回所有借阅记录的总数,导致所有书籍的频次结果完全相同。

解决前提

你提到两张表无关联字段,这是无法统计单本书借阅频次的核心障碍——系统根本不知道哪条借阅记录对应哪本书。必须先给loan表添加能关联books表的字段(比如isbn或书籍ID),否则这个统计需求无法实现。

修正后的SQL(假设loan表已添加book_isbn字段)

SELECT b.isbn, b.title, COUNT(l.taken) AS frequency
FROM books b
LEFT JOIN loan l ON l.book_isbn = b.isbn
GROUP BY b.isbn, b.title;
  • 用LEFT JOIN替代INNER JOIN,可以保留从未被借阅的书籍(这类书籍的频次会显示为0)。
  • GROUP BY包含isbn和title,确保按单本书分组(同一书名可能对应不同ISBN,用ISBN更准确)。
  • 关联条件ON l.book_isbn = b.isbn让数据库正确匹配借阅记录和对应书籍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:58