理解FROM子句中的子查询:如何计算各骑行站点骑行次数
拆解解读共享单车站点骑行次数统计SQL代码
原查询语句(注:原语句存在一处小错误,已标注)
SELECT station_id, name, number_of_rides. -- 这里多了一个英文句号,需删除才能正常执行 FROM ( SELECT start_station_id, COUNT(*) number_of_rides FROM bigquery-public-data.new_york.citibike_trips GROUP BY start_station_id ) INNER JOIN bigquery-public-data.new_york_citibike.citibike_stations ON station_id = start_station_id ORDER BY number_of_rides DESC
代码逐部分拆解解读
1. 子查询:统计各起点站的骑行次数
这是核心统计逻辑:
- 从
bigquery-public-data.new_york.citibike_trips表(纽约共享单车骑行记录总表)读取数据 - 按
start_station_id(骑行起点站ID)分组,把同一站点出发的所有骑行记录归为一组 - 用
COUNT(*)统计每组的记录行数——每一行对应一次骑行,所以统计结果就是该站点作为起点的总骑行次数,命名为number_of_rides - 子查询最终输出「起点站ID + 对应骑行次数」的数据集
2. INNER JOIN:关联站点信息表获取站点名称
- 将子查询的统计结果,与
bigquery-public-data.new_york_citibike.citibike_stations表(共享单车站点信息表)做内关联 - 关联条件
station_id = start_station_id:把站点信息表的站点ID,和子查询的起点站ID一一匹配,从而将站点名称(name字段)和骑行次数对应起来 - 内关联仅保留两边表ID匹配的记录,也就是只统计有对应站点信息的骑行数据
3. 最终输出与排序
- 通过
SELECT指定输出字段:站点ID(station_id)、站点名称(name)、骑行次数(number_of_rides) - 用
ORDER BY number_of_rides DESC将结果按骑行次数从多到少排序,直观展示热门站点
内容的提问来源于stack exchange,提问作者Data_Yoshy
相关产品推荐
相关产品推荐

