我的桌子,借款人:
+----------+---------+
| name | loan_id |
+----------+---------+
| Adams | L16 |
| Curry | L93 |
| Hayes | L15 |
| Jackson | L14 |
| Jones | L17 |
| Smith | L11 |
| Smith | L23 |
| Williams | L17 |
+----------+---------+
贷款:
+---------+-------------+--------+
| loan_id | branch_name | amount |
+---------+-------------+--------+
| L11 | Round Hill | 900 |
| L14 | Downtown | 1500 |
| L15 | Perryridge | 1500 |
| L16 | Perryridge | 1300 |
| L17 | Downtown | 1000 |
| L23 | Redwood | 2000 |
| L93 | Mianus | 500 |
+---------+-------------+--------+
我希望找到客户最大的贷款。
我在查询中取得了部分成功:
select name, max(amount)
from loan, borrower
where borrower.loan_id=loan.loan_id;
结果:
+-------+-------------+
| name | max(amount) |
+-------+-------------+
| Adams | 2000 |
+-------+-------------+
但它从第一行取名,找到最大数量并打印结果。所以我使用having
这样的句子:
select name, amount
from loan, borrower
where borrower.loan_id=loan.loan_id
having max(amount)=amount;
但我得到一个空集。
答案 0 :(得分:1)
您可以group by
客户并从加入的max
表中获取loan
金额。
此查询与您的第一次尝试非常相似,但区别在于group by
子句。这会导致查询每个客户名称返回一行(名称在group by中)。 max
(以及我的示例中也为sum
)是按“组”计算的,因此在这种情况下按名称计算。
在您的查询中,您没有group by
,因此max
已确定(聚合)所有行。许多其他数据库甚至不会执行您的查询,因为他们认为应该在group by
中指定字段,或者应该在min
,max
或{等聚合函数中调用该字段。 {1}}。 MySQL有点傻不同,因为它只选择要显示的任何客户名称。
sum
当然,如果客户也有ID,那会更好。毕竟,你可能会得到两个名叫史密斯的客户。
答案 1 :(得分:1)
如果你想要的是获得最高金额的贷款和拥有它的客户,那么你可以使用以下查询:
SELECT b.name, l.loan_id, l.amount
FROM borrower AS b
INNER JOIN loan AS l ON b.loan_id = l.loan_id
ORDER BY l.amount DESC
LIMIT 1
查询创建一组所有贷款及其关联客户,按amount
按降序排列,并返回最上面的记录,即具有最大金额的记录。
如果多个贷款具有相同的最高金额,并且您希望返回这些贷款的所有的数据,那么您可以使用以下查询:
SELECT b.name, l.loan_id, l.amount
FROM borrower AS b
INNER JOIN loan AS l ON b.loan_id = l.loan_id
WHERE l.amount IN (SELECT MAX(amount)
FROM loan )