用SQL统计每五分钟内经过某路口、某方向的车的数量

要求

将trainCrossroadFlow1-19合并导入数据库,将每[0,5)分钟相同direction,crossroad的数据进行数量统计,储存为新的csv文件,处理前文件格式如下:

direction laneID timestamp crossroadID vehicleID
5 1 2019-08-20 07:27:27 100120 鲁B-b406588b21181696

目标格式如下:

direction startTime endTime crossroadID vehicleNum
1 2019/8/1 7:00 2019/8/1 7:05 100120 xx
3 2019/8/1 7:05 2019/8/1 7:10 100120 xx

处理方法不限,推荐使用数据库,处理速度快。

解决方案

第一步

将timestamp(varchar)字段转成datetime类型 保存成的表test_trafficflow_01

CREATE TABLE test_trafficflow_01 AS SELECT
	direction,
	crossroadID
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将行转列,可以使用SQL语句中的PIVOT操作,而要统计某列数量前十,可以使用SQL语句中的TOP操作或者LIMIT操作(不同数据库支持的语法可能有所不同)。下面给出一个例子来说明如何使用SQL完成行转列并统计数量前十的操作。 假设有一个名为sales的表,其中包含销售记录,包括日期(date)、产品类型(product_type)和销售数量(quantity)三个字段,如下所示: ``` +------------+--------------+----------+ | date | product_type | quantity | +------------+--------------+----------+ | 2022-01-01 | A | 10 | | 2022-01-01 | B | 20 | | 2022-01-01 | C | 30 | | 2022-01-02 | A | 15 | | 2022-01-02 | B | 25 | | 2022-01-02 | C | 35 | | 2022-01-03 | A | 12 | | 2022-01-03 | B | 22 | | 2022-01-03 | C | 32 | +------------+--------------+----------+ ``` 要将产品类型(product_type)作为列,日期(date)作为行,而销售数量(quantity)作为值,并统计某列数量前十,可以使用以下SQL语句: ``` SELECT date, [A], [B], [C] FROM ( SELECT date, product_type, quantity FROM sales ) AS s PIVOT ( SUM(quantity) FOR product_type IN ([A], [B], [C]) ) AS p ORDER BY date ASC; ``` 以上SQL语句使用了PIVOT操作将产品类型(product_type)从行转列,并使用SUM函数对销售数量(quantity)进行求和。最后,使用ORDER BY语句按照日期升序排序。执行以上SQL语句将会得到以下结果: ``` +------------+----+----+----+ | date | A | B | C | +------------+----+----+----+ | 2022-01-01 | 10 | 20 | 30 | | 2022-01-02 | 15 | 25 | 35 | | 2022-01-03 | 12 | 22 | 32 | +------------+----+----+----+ ``` 如果要统计某列数量前十,可以在以上SQL语句的基础上再加上TOP操作或者LIMIT操作,例如: ``` SELECT date, [A], [B], [C] FROM ( SELECT date, product_type, quantity FROM sales ) AS s PIVOT ( SUM(quantity) FOR product_type IN ([A], [B], [C]) ) AS p ORDER BY [A] DESC LIMIT 10; ``` 以上SQL语句会将A列的值按照降序排列,然后取前十行。如果使用的是支持TOP操作的数据库,可以将LIMIT操作替换为TOP操作,例如: ``` SELECT TOP 10 date, [A], [B], [C] FROM ( SELECT date, product_type, quantity FROM sales ) AS s PIVOT ( SUM(quantity) FOR product_type IN ([A], [B], [C]) ) AS p ORDER BY [A] DESC; ``` 以上SQL语句会将A列的值按照降序排列,然后取前十行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值