SQL * Plus Query帮助从不同的表中求和并计算并获得正确的答案

时间:2016-09-23 00:49:03

标签: sql oracle

这是我的查询,并且给了我错误的金额。我该如何解决?应该总共给出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;

2 个答案:

答案 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
;