2014-11-05 111 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