为什么要用WHERE来JOIN同一张表

问题描述 投票:0回答:1

我是 SQL 新手,我一直在 Coursera 上上课。有一个查询在 SELECT 子句中合并了子查询。我理解大约 90% 的查询,但是,我不明白为什么我们需要在子查询中使用 WHERE。在我看来,WHERE 的作用就像 JOIN ON。不知道为什么需要“加入”。谢谢你,拉斐尔。

SELECT
  starttime,
  stoptime,
  start_station_id,
  tripduration,
      (SELECT  
        ROUND(AVG(tripduration),2) 
          FROM `bigquery-public-data.new_york_citibike.citibike_trips`
            WHERE start_station_id = outer_trips.start_station_id) AS avg_duration_for_stations,
        ROUND (tripduration - (SELECT AVG(tripduration) 
          FROM `bigquery-public-data.new_york_citibike.citibike_trips`
            WHERE start_station_id = outer_trips.start_station_id),2)

FROM
  `bigquery-public-data.new_york_citibike.citibike_trips` AS outer_trips

我试图消除 where 因为我的理解是 WHERE 用作过滤器。所以,我无法理解为什么它起着“加入”的作用。我期待一个子查询能够创建两个额外的列,而无需添加 WHERE 的冗长步骤。

sql join google-bigquery subquery where-clause
1个回答
0
投票

子查询中的WHERE子句实际上过滤了

中的行
bigquery-public-data.new_york_citibike.citibike_trips

其中 start_station_id 与正在处理的当前行的 start_station_id 匹配。

在外部查询中,确保子查询中计算的平均行程持续时间特定于外部查询中的开始或每个单独的行程。

需要在子查询中使用 WHERE 的原因是因为它过滤了 citibike_trips 表中的行以计算平均行程持续时间,我认为它用于定位从外部查询中当前行的相同站点开始的行程。如果删除 where 过滤,它将返回所有行程的平均行程持续时间,而不仅仅是从同一车站出发的行程,这会改变查询的预期行为。

© www.soinside.com 2019 - 2024. All rights reserved.