使用SQL的相关子查询

时间:2017-06-10 16:33:53

标签: mysql

我刚开始用sql编码。这是我挣扎的相关子查询的一个例子;任何人都可以用外行的方式解释这里发生的事情:

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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。

4号航班是汉莎航空公司的航班,其距离400大于汉莎航空公司350的平均距离。