将where子句与where子句中的同一个表相同

时间:2014-11-05 05:55:49

标签: mysql sql

可能这是一个愚蠢的问题,但我真的很难理解下面的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 个答案:

答案 0 :(得分:2)

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

当执行上面两行时,你将从spy获得所有代号,但当你应用条件时,amountDue大于等于你的检索平均数量,其中s1和s2 spymaster是相同的。表示使用内部值检查外部值。当值相同时,将显示Codename。

我理解我与您分享的内容,如果您有任何关于此的信息,请告诉我,这对我有帮助!