2017-06-10 184 views
-1

我剛開始使用sql進行編碼。這是一個與之相關的子查詢的例子。任何人都可以請通俗地說解釋什麼怎麼回事:使用SQL的相關子查詢

SELECT id 
FROM flights AS f 
WHERE distance > (SELECT AVG(distance) 
        FROM flights 
        WHERE carrier = f.carrier); 

回答

0

您的查詢返回的所有航班,在距離比特定運營商的平均距離更大。

一個例子:

id flight  carrier distance 
1 Brussels Swiss  200 
2 New York Swiss  2000 
3 Berlin  Lufthansa 300 
4 London  Lufthansa 400 
瑞士的

平均距離爲1100和莎的是350

而查詢返回:

2 
4 

飛行2是載波的瑞士和它的距離的2000大於瑞士1100的平均距離。

Fligh t 4是漢莎承運人,其距離400大於漢莎航空350的平均距離。

1

您的查詢在語義上與以下內容相同,我個人發現它更易於閱讀。 (我懷疑它也快得多)...

SELECT id 
    FROM flights g 
    JOIN 
    (SELECT carrier 
      , AVG(distance) avg_distance 
     GROUP 
      BY carrier 
    ) x 
    ON x.carrier = f.carrier 
    AND x.distance > avg_distance; 
+0

你認爲哪一個更快?你的查詢還是我寫的? –

+0

我可以理解你寫的查詢。謝謝 –