这是我的查询,并且给了我错误的金额。我该如何解决?应该总共给出167700,但总贷款给我2515500。计数工作正常= 15.我无法更改表格上的任何内容。
create table loan
(loan_number varchar(15) not null,
branch_name varchar(15) not null,
amount number not null,
primary key(loan_number));
create table customer
(customer_name varchar(15) not null,
customer_street varchar(12) not null,
customer_city varchar(15) not null,
primary key(customer_name));
select SUM(amount),
COUNT( distinct customer_name)
from loan,customer;
答案 0 :(得分:2)
简单规则:从不在FROM
子句中使用逗号。 始终使用明确,正确的JOIN
语法和ON
子句中的条件。 然后你不会忘记他们!
所以:
select SUM(amount),
COUNT( distinct customer_name)
from loan l join
customer c
on l.customerid = c.customerid;
当然,我编写了用于join
的列的名称,因为您的问题没有描述表格的信息。
答案 1 :(得分:1)
咄!两个表中没有共同的密钥。那个怎么样?您如何跟踪哪个客户获得了哪些贷款?
为什么要对两个UNRELATED表中的数据运行一个查询?您创建的CROSS JOIN(通过对两个表的枚举没有任何条件)只是将第一个表中的每一行连接到第二个表中的每一行。
看来,customer表有15行,所有15个名称都是不同的。当您COUNT DISTINCT时,您会得到正确的数字,即使在交叉连接中,每个customer_name都会出现多次。
另一方面,每笔贷款金额重复15次。 167,700 x 15 = 2,515,500。
如果您需要在一行中显示总贷款金额和(不同)客户数量,您需要类似
的内容select (select sum(amount) from loan) as total_amount,
(select count (distinct customer_name) from customer) as distinct_customers
from dual
;