我想显示借得最少的贷款。在这种情况下,两笔贷款捆绑在一起的借款人数量最少。
Loan:
no | type
------------
L1 | house
L2 | student
L3 | car
Borrower ('num' is foreign key to 'no'):
name | num
----------
A | L1
A | L1
A | L2
A | L3
SELECT loan.type
FROM loan, borrower
WHERE loan.no = b.num
AND loan.type = (SELECT MIN(type) from loan)
GROUP BY loan.type
这应该产生
student
和car
,但现在只给我一个。我应该如何修改查询以解决此问题?
最佳答案
这是使用CTE的方法:
WITH lb as (
SELECT l.type, COUNT(b.num) as cnt
FROM loan l LEFT JOIN
borrower b
ON l.no = b.num
GROUP BY l.type
)
SELECT lb.type
FROM lb
WHERE lb.cnt = (SELECT MIN(lb.cnt) FROM lb);
笔记:
如果您希望借款人的贷款类型最少,那么您应该比较计数而不是类型。
LEFT JOIN
考虑没有借款人的贷款类型。您需要学习正确的显式
JOIN
语法。简单规则:切勿在FROM
子句中使用逗号;始终使用显式JOIN
语法。
关于sql - 选择多个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336880/