【发布时间】:2017-11-29 03:15:01
【问题描述】:
这是我目前就读的基础 SQL 课程项目的最后一部分。教授已经好几天没有回复我了,明天就要交了。
所以我有一个奇怪的问题需要解释一下。 我有一个表 CUSTOMER,其中包含 CID、SPONSORID、LAST_NAME 和 BALANCE_DUE。 一些客户 (cid) 赞助 (sponsorID) 其他客户 (cid),并且赞助商负责他们的 balance_due 和他们赞助的客户的 balance_due。被赞助的朋友包含赞助他们的客户的 CID,位于表上朋友行的 SPONSORID 列下。并非所有赞助商都有 balance_due,但他们赞助的客户可能有 balance_due,反之亦然。我需要创建一个查询,该查询仅使用赞助商的姓氏返回赞助商的姓氏、他们的总朋友总数、他们的个人到期总数和到期总数(总结他们的欠款和朋友的欠款)赞助商。
到目前为止,以下代码(以及运行时的结果)似乎有效,但由于某种原因,它对赞助商 Finch 的价值(她欠自己的)求和 TWICE(她欠 3.75,但 sum 函数保持返回 7.50。Sum(a.BALANCE_DUE) 列是她赞助的客户应付余额的正确合计,但 Sum(b.BALANCE_DUE) 列以某种方式添加了她两次欠款。显示的 Rush 金额是正确的,没有加两次,比如 Finch 的总和(rush 也有朋友,但没有人欠任何东西,所以只有她的余额出现了)我想是因为 Finch 自己欠了一些,她的朋友也欠,查询是把她的个人金额相加两次正因为如此,但我就是不明白怎么......任何指针?
select b.LAST_NAME, Sum(a.BALANCE_DUE), Sum(b.balance_due)
from CUSTOMER a, CUSTOMER b
where a.SPONSORID = b.CID AND b.BALANCE_DUE is not null
group by b.LAST_NAME;
[ Wrote 4 lines ]
SQL> start q11.sql
LAST_NAME SUM(A.BALANCE_DUE) SUM(B.BALANCE_DUE)
---------- ------------------ ------------------
Rush 8.25
Finch 30 7.5
此外,如前所述,最终输出需要有最后一列,根据赞助商的欠款和受赞助的个人欠款总计欠款总额(基本上添加列 Sum(a.balance_due) 和 Sum(b .balance_due)将该输出放在同一个输出表(一个查询)中自己的列中......仍在尝试考虑如何做到这一点,查看我的笔记......但聚合函数肯定需要工作首先正确。
注意:我知道这是一个 ANSI87 类型的连接,它是教授的偏好,而且它非常令人头疼.....
无法添加到 cmets:这是客户表,没有重复出现
SQL> select * from customer;
CID FIRST_NAME LAST_NAME CATEGORY SPONSORID BALANCE_DUE
10001 Rita Rush Faculty 8.25
10002 Becky Finch Faculty 3.75
10003 Joyce Xx_Nestler Friend 10002 20
10004 Wolf Xx_Nestler Student 2
10005 Vicky White Student 6.3
10006 John Kline Student
10007 Anya Rush Student 3.5
10008 Carol Crane Friend 10002 10
10009 Tricia Tatum Faculty
10010 Brian Price Student
10011 Lucy Nash Faculty 1.75
10012 Larry Bell Friend 10001
10013 Ron Welsh Friend 10009
已选择 13 行。
【问题讨论】:
-
因为你还在学习,所以要养成一个好习惯,使用正确的 JOIN 语法。
-
这才是症结所在,教授要求项目报告使用HIS FORMATTING PREFERENCE,ANSI87标准,这对全班来说是一个巨大的痛苦,我们中的一些人甚至因为我们想要现代而去找院长, 最新信息。整个学期他都要求 ANSI87 标准,否则我们会失去 10% 的成绩……可笑的恕我直言。他不教任何现代方法,他自制的课堂教科书,虽然更新,但仍然非常过时。
-
你能发布这个结果的源数据吗?
-
您必须有重复的记录。运行不带 GROUP BY 的查询。删除 SUM()。看看有没有重复的行。
-
LAST_NAME BALANCE_DUE BALANCE_DUE ---------- ----------- ----------- Rush 8.25 Finch 20 3.75 Finch 10 3.75