编写SQL查询:获取每个贷款人的借款超4次的不同借款人信息
修正后的SQL查询语句及问题解析
咱们先拆解下你的需求核心:找出每个贷款人对应的、从他那里借款次数超过4次的不同借款人姓名。先看看原语句里的几个明显问题:
- 分组字段笔误:原语句里的
GROUP BY ... lower应该是m.loaner(贷款人字段),这是明显的拼写错误; - 筛选条件不符合需求:你要的是“超过4次”,所以HAVING子句应该用
COUNT(*) > 4而不是COUNT(*) = 4; - 分组维度逻辑偏差:需要按「贷款人 + 借款人」的组合分组,才能精准统计每个借款人从对应贷款人处的借款次数,进而筛选出符合条件的记录。
修正后的基础版SQL语句
SELECT m.loaner AS 贷款人, p.name AS 借款人姓名, COUNT(*) AS 借款次数 FROM person p INNER JOIN loan l ON p.id = l.id -- person表的id对应借款人ID,关联loan表的借款人记录 INNER JOIN money m ON l.acct = m.acct -- 通过贷款账户关联到money表的贷款人信息 GROUP BY m.loaner, p.id, p.name -- 按贷款人+借款人(用ID确保唯一,避免同名干扰)分组 HAVING COUNT(*) > 4 -- 筛选借款次数超过4次的组合 ORDER BY m.loaner, 借款次数 DESC; -- 可选:按贷款人、借款次数排序,结果更直观
补充:更严谨的关联版本(若loaner存储的是ID)
如果money.loaner字段存储的是贷款人的person.id(而非直接存储姓名),需要额外关联一次person表来获取贷款人姓名,语句如下:
SELECT lender.name AS 贷款人姓名, borrower.name AS 借款人姓名, COUNT(*) AS 借款次数 FROM person borrower INNER JOIN loan l ON borrower.id = l.id INNER JOIN money m ON l.acct = m.acct INNER JOIN person lender ON m.loaner = lender.id -- 关联贷款人的person记录 GROUP BY lender.id, lender.name, borrower.id, borrower.name HAVING COUNT(*) > 4;
内容的提问来源于stack exchange,提问作者stef
相关产品推荐
相关产品推荐

