2014-11-05 74 views
0

相同的表中列可能这是一个愚蠢的问题,但我真的很难理解下面的SQL查询。等同于从条款

所以我正在做这个练习:什么是间谍的代码名称谁没有少金额比 间谍的平均amountDue与同一个间谍管理员?

表如下图所示:

codeName firstName lastName dateOfBirth gender mark    amountDue spymaster bankAccount 
007   James  Bond  01-12-72 M  Mole on chin  5050  Q  23456 
bud   Fanny  Charleston 31-07-83 F  Scar on cheek  25.67  Q  34567 
freddie  John  Smith  05-05-54 M  One finger missing 312.5  M  45678 

用来解决这个问题的代码是:

select codeName 
from Spy as S1 
where amountDue >= 
    (select avg(amountDue) 
    from Spy as S2 
    where S1.spymaster = S2.spymaster) 

我不明白的是在WHERE子句中的条件。感谢有人能为我解释那一点。

感谢, 莫

回答

1
select codeName 
from Spy as S1 --outer 
where amountDue >= 
    (select avg(amountDue) 
    from Spy as S2 --inner 
    where S1.spymaster = S2.spymaster) 

当上述两行执行,你会得到从谍所有代号,但是当你应用条件,其中amountDue大于等于您检索平均量,其中S1和S2王牌间谍是相同。意味着你的内部值检查外部值。当值将相同Codename将显示。我知道我与你分享了什么,如果你有任何关于此的更多信息,请告诉我,这对我很有帮助!

+0

谢谢@Sandesh。我明白这个逻辑,我不明白的是内部的WHERE条件。为什么使用正在使用(其中S1.spymaster = S2.spymaster) – mobaset 2014-11-05 07:03:01

+0

他们正在使用spymaster column.means s1.spymaster和s2.spymaster将外部表与内部表进行比较,当两者相等时,那些相关的amountDue将组合并查找平均值该数额与条件满足时的外部条件相符。当条件满足这些代码名称时将显示! – Sandesh 2014-11-05 07:24:40

+0

好酷,谢谢。但让我们回到这个问题一分钟:_具有相同间谍管理员的间谍的间隔码amountDue的数量不会少于amountDue_ **的平均值** **。所以这个问题显然希望将数量与间谍报道的平均数量相比较(至少这是我的理解)。在隔离测试第二个嵌套的SQL查询之后,无论间谍报告的是哪个spymaster,查询平均所有的amountDue。对?我们不应该只计算与特定间谍大师相关的数额吗? – mobaset 2014-11-05 07:52:54