也许这是一个愚蠢的问题,但我真的很难理解下面的SQL查询。

因此,我正在执行此练习:不小于amountDue的间谍的代号是什么?
具有相同间谍大师的间谍的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子句中的条件。如果有人能为我解释这一点,不胜感激。

谢谢,

最佳答案

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 spymaster相同。表示您用内部值检查外部值。当值相同时,将显示那些代号。

我了解到我与您分享的信息,如果您有更多关于此的信息,请告诉我,这对我有帮助!

关于mysql - 等同于where子句中同一表中的同一列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26750604/

10-12 00:02
查看更多