2017-06-10 102 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

我可以理解你写的查询。谢谢 –