我的sql查询一直有问题。我试图从用户表中获取所有值,并将他们本月在贷款表上收集的贷款相加,但每次运行查询时都会收到错误。
这是sql查询
SELECT * FROM customer c
INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no) AS l ON c.cust_no=l.ac_no
拜托,我做错了什么?感谢。
答案 0 :(得分:0)
试试这个:
SELECT c.*,l.lamt FROM customer c INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no,disb_date) AS l ON c.cust_no=l.ac_no
答案 1 :(得分:0)
您在select
中选择的列数多于group by
中的列数。所以:
SELECT c.*, l.lamt
FROM customer c LEFT JOIN
(SELECT SUM(loan_amt) as lamt, ac_no
FROM loans
GROUP BY ac_no
) l
ON c.cust_no = l.ac_no;
请注意,我还将联接更改为LEFT JOIN
。你的问题具体说“所有行”,这表明甚至没有贷款的行。
答案 2 :(得分:0)
我同意戈登林道夫。这是因为您的group by
不包含disb_date,即使它位于子查询的选择部分。但是,您不希望将其添加到组中,因为它可能无法生成正确的结果。
我猜你想要disb_date,因为你想要在特定月份检索贷款。它是否正确?如果是这样,我会在Gordon的解决方案中添加where子句:
SELECT c.*, l.lamt
FROM customer c LEFT JOIN
(SELECT SUM(loan_amt) as lamt, ac_no
FROM loans WHERE disb_date BETWEEN <insert date> AND <insert date>
GROUP BY ac_no
) l
ON c.cust_no = l.ac_no;
这将显示仅在指定月份收取的贷款总额。