当您加载数据集后,就可以开始构建一些查询来发现数据告诉您什么。在本节中,您将学习如何编写查询来回答以下问题
此数据集包含 2016 年 1 月的乘车数据。要找出每天发生多少次乘车,您可以使用 SELECT
语句。在本例中,您想要计算每天的总乘车次数,并按日期将其显示在列表中。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,使用此查询选择 2016 年 1 月第一周的所有乘车记录,并返回每天的乘车次数计数
SELECT date_trunc('day', pickup_datetime) as day,COUNT(*) FROM ridesWHERE pickup_datetime < '2016-01-08'GROUP BY dayORDER BY day;查询结果如下所示
day | count---------------------+--------2016-01-01 00:00:00 | 3450372016-01-02 00:00:00 | 3128312016-01-03 00:00:00 | 3028782016-01-04 00:00:00 | 3161712016-01-05 00:00:00 | 3432512016-01-06 00:00:00 | 3485162016-01-07 00:00:00 | 364894
您可以在 SELECT
查询中包含一个函数,以确定每位乘客支付的平均票价。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,使用此查询选择 2016 年 1 月第一周的所有乘车记录,并返回每天支付的平均票价
SELECT date_trunc('day', pickup_datetime)AS day, avg(fare_amount)FROM ridesWHERE pickup_datetime < '2016-01-08'GROUP BY dayORDER BY day;查询结果如下所示
day | avg---------------------+---------------------2016-01-01 00:00:00 | 12.85693250289099432016-01-02 00:00:00 | 12.43447135993555632016-01-03 00:00:00 | 13.06159004615719862016-01-04 00:00:00 | 12.20729273083236602016-01-05 00:00:00 | 12.00186708851540132016-01-06 00:00:00 | 12.00023290178930092016-01-07 00:00:00 | 12.1234180337303436
纽约市的出租车对不同类型的行程使用不同的费率类型。例如,往返机场的行程从市内任何地点起价均为统一费率。本节将向您展示如何构建一个查询,显示每种不同票价类型的行程数量。它还使用 JOIN
语句以更易于理解的方式呈现数据。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,使用此查询选择 2016 年 1 月第一周的所有乘车记录,并返回每种费率代码的总行程次数
SELECT rate_code, COUNT(vendor_id) AS num_tripsFROM ridesWHERE pickup_datetime < '2016-01-08'GROUP BY rate_codeORDER BY rate_code;查询结果如下所示
rate_code | num_trips-----------+-----------1 | 22664012 | 548323 | 41264 | 9675 | 71936 | 1799 | 42
此输出是正确的,但不太容易阅读,因为您可能不知道不同的费率代码意味着什么。但是,数据集中的 rates
表包含每个代码的人类可读描述。您可以在查询中使用 JOIN
语句连接 rides
和 rates
表,并在结果中呈现来自两者的信息。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,复制此查询以选择 2016 年 1 月第一周的所有乘车记录,连接
rides
和rates
表,并返回每种费率代码的总行程次数,以及费率代码的描述SELECT rates.description, COUNT(vendor_id) AS num_tripsFROM ridesJOIN rates ON rides.rate_code = rates.rate_codeWHERE pickup_datetime < '2016-01-08'GROUP BY rates.descriptionORDER BY LOWER(rates.description);查询结果如下所示
description | num_trips-----------------------+-----------group ride | 17JFK | 54832Nassau or Westchester | 967negotiated fare | 7193Newark | 4126standard rate | 2266401
数据集中有两个主要的机场:约翰·肯尼迪机场(JFK),费率代码为 2;纽瓦克机场(EWR),费率代码为 3。
有关往返这两个机场的行程信息对于城市规划以及纽约市旅游局等组织非常有用。
本节将向您展示如何构建一个查询,返回仅往返新主机场的行程信息。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,使用此查询选择 2016 年 1 月第一周往返 JFK 和纽瓦克机场的所有乘车记录,并返回往返该机场的行程次数、平均行程时长、平均行程费用和平均乘客人数
SELECT rates.description,COUNT(vendor_id) AS num_trips,AVG(dropoff_datetime - pickup_datetime) AS avg_trip_duration,AVG(total_amount) AS avg_total,AVG(passenger_count) AS avg_passengersFROM ridesJOIN rates ON rides.rate_code = rates.rate_codeWHERE rides.rate_code IN (2,3) AND pickup_datetime < '2016-01-08'GROUP BY rates.descriptionORDER BY rates.description;查询结果如下所示
description | num_trips | avg_trip_duration | avg_total | avg_passengers-------------+-----------+-------------------+---------------------+--------------------JFK | 54832 | 00:46:44.614222 | 63.7791311642836300 | 1.8062080536912752Newark | 4126 | 00:34:45.575618 | 84.3841783809985458 | 1.8979641299079011
纽约市以时代广场的新年降球庆祝活动而闻名。成千上万的人聚集在一起迎接新年,然后前往城市各处:去他们最喜欢的酒吧,与朋友聚餐,或返回家中。本节将向您展示如何构建一个查询,返回 2016 年 1 月 1 日每 30 分钟间隔的出租车行程次数。
在 PostgreSQL 中,按 30 分钟的时间间隔分割数据并不容易。为此,您需要使用 TRUNC
函数来计算行程开始时间的分钟数除以 30 的商,然后截断结果以取该商的底。当您得到该结果时,您可以将截断的商乘以 30。
在您的 Timescale 数据库中,您可以使用 time_bucket
函数将数据分割成时间间隔。
连接到包含 NYC 出租车数据集的 Timescale 数据库。
在 psql 提示符下,使用此查询选择 2016 年 1 月 1 日的所有乘车记录,并返回每 30 分钟间隔的乘车次数计数
SELECT time_bucket('30 minute', pickup_datetime) AS thirty_min, count(*)FROM ridesWHERE pickup_datetime < '2016-01-02 00:00'GROUP BY thirty_minORDER BY thirty_min;查询结果开始如下所示
thirty_min | count---------------------+-------2016-01-01 00:00:00 | 109202016-01-01 00:30:00 | 143502016-01-01 01:00:00 | 146602016-01-01 01:30:00 | 138512016-01-01 02:00:00 | 132602016-01-01 02:30:00 | 122302016-01-01 03:00:00 | 11362
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。