经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » SQL语言 » 查看文章
使用SQL实现车流量的计算的示例代码
来源:jb51  时间:2022/2/28 13:23:51  对本文有异议

卡口转换率

将数据导入hive,通过SparkSql编写sql,实现不同业务的数据计算实现,主要讲述车辆卡口转换率,卡口转化率:主要计算不同卡口下车辆之间的流向,求出之间的转换率。

在这里插入图片描述

1、查出每个地区下每个路段下的车流量

  1. select
  2. car,
  3. monitor_id,
  4. action_time,
  5. ROW_NUMBER () OVER (PARTITION by car
  6. ORDER by
  7. action_time) as n1
  8. FROM
  9. traffic.hive_flow_action

此结果做为表1,方便后面错位连接使用

在这里插入图片描述

2、通过错位连接获取每辆车的行车记录

通过表1的结果,与自身进行错位链接,并以车牌为分区,拼接经过卡口的过程

  1. (select
  2. t1.car,
  3. t1.monitor_id,
  4. concat(t1.monitor_id,
  5. "->",
  6. t2.monitor_id) as way
  7. from
  8. (
  9. select
  10. car,
  11. monitor_id,
  12. action_time,
  13. ROW_NUMBER () OVER (PARTITION by car
  14. ORDER by
  15. action_time) as n1
  16. FROM
  17. traffic.hive_flow_action) t1
  18. left join (
  19. select
  20. car,
  21. monitor_id,
  22. action_time,
  23. ROW_NUMBER () OVER (PARTITION by car
  24. ORDER by
  25. action_time) as n1
  26. FROM
  27. traffic.hive_flow_action) t2 on
  28. t1.car = t2.car
  29. and t1.n1 = t2.n1-1
  30. where
  31. t2.action_time is not null)

在这里插入图片描述

获取到每辆车的一个行车记录,经过的卡口

3、获取行车过程中的车辆数

获取卡口1~卡口2,…等的车辆数有哪些,即拿上面的行车记录字段进行分区在进行统计

  1. (select
  2. s1.way,
  3. COUNT(1) sumCar
  4. from
  5. --行车过程
  6. (select
  7. t1.car,
  8. t1.monitor_id,
  9. concat(t1.monitor_id,
  10. "->",
  11. t2.monitor_id) as way
  12. from
  13. (
  14. select
  15. car,
  16. monitor_id,
  17. action_time,
  18. ROW_NUMBER () OVER (PARTITION by car
  19. ORDER by
  20. action_time) as n1
  21. FROM
  22. traffic.hive_flow_action) t1
  23. left join (
  24. select
  25. car,
  26. monitor_id,
  27. action_time,
  28. ROW_NUMBER () OVER (PARTITION by car
  29. ORDER by
  30. action_time) as n1
  31. FROM
  32. traffic.hive_flow_action) t2 on
  33. t1.car = t2.car
  34. and t1.n1 = t2.n1-1
  35. where
  36. t2.action_time is not null)s1
  37. group by way)

在这里插入图片描述

4、获取每个卡口的总车辆数

获取每个卡口最初的车辆数,方便后面拿行车轨迹车辆数/总车辆数,得出卡口之间的转换率

  1. select
  2. monitor_id ,
  3. COUNT(1) sumall
  4. from
  5. traffic.hive_flow_action
  6. group by
  7. monitor_id

在这里插入图片描述

5、求出卡口之间的转换率

  1. select
  2. s2.way,
  3. s2.sumCar / s3.sumall zhl
  4. from
  5. (
  6. select
  7. s1.way,
  8. COUNT(1) sumCar
  9. from
  10. --行车过程
  11. (
  12. select
  13. t1.car,
  14. t1.monitor_id,
  15. concat(t1.monitor_id,
  16. "->",
  17. t2.monitor_id) as way
  18. from
  19. (
  20. select
  21. car,
  22. monitor_id,
  23. action_time,
  24. ROW_NUMBER () OVER (PARTITION by car
  25. ORDER by
  26. action_time) as n1
  27. FROM
  28. traffic.hive_flow_action) t1
  29. left join (
  30. select
  31. car,
  32. monitor_id,
  33. action_time,
  34. ROW_NUMBER () OVER (PARTITION by car
  35. ORDER by
  36. action_time) as n1
  37. FROM
  38. traffic.hive_flow_action) t2 on
  39. t1.car = t2.car
  40. and t1.n1 = t2.n1-1
  41. where
  42. t2.action_time is not null)s1
  43. group by
  44. way)s2
  45. left join
  46. --每个卡口总车数
  47. (
  48. select
  49. monitor_id ,
  50. COUNT(1) sumall
  51. from
  52. traffic.hive_flow_action
  53. group by
  54. monitor_id) s3 on
  55. split(s2.way,
  56. "->")[0]= s3.monitor_id
  57.  

在这里插入图片描述

 到此这篇关于使用SQL实现车流量的计算的示例代码的文章就介绍到这了,更多相关SQL 车流量内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号