1. 程式人生 > >蘇州城市大腦SQL語句--計算某個區域公交車的出行分擔率

蘇州城市大腦SQL語句--計算某個區域公交車的出行分擔率

from gpo rop double rod case when table blog concat

去年寫的比較長的SQL,雖然現在不怎麽寫了。發在博客上面紀念一下。

計算公交駕車分擔率,邏輯如下

早上6點到晚上9點早高峰,晚上16:30-19:30晚高峰,其余時間平峰。

根據OD五分鐘的公交的出行人數(人數是之前表中算好的),按照高峰類型,是否工作日,某個區域公交出行的人數。某個區域公交人數除以總人數就是公交的分擔率。

drop table if exists bus_qy_fdl_jc;
CREATE TABLE IF NOT EXISTS bus_qy_fdl_jc (
rq STRING,
lx STRING,
sjd STRING,
qyid STRING,
qylx STRING,
fdl DOUBLE
);
insert overwrite table bus_qy_fdl_jc
select rq,lx,sjd,bh as qyid,qylx,fdl from (


select a.rq,a.lx,a.sjd,a.bh,a.qylx,round(b.jcrs/a.zrs,4)*100 as fdl from (

select rq,lx,sjd,bh,qylx,round(avg(rs),3) as zrs from (
select substr(rq,1,6) as rq,lx,sjd,bh,qylx,sum(rs) as rs from (
select rq,size as qylx,bh,rs,
case when weekday(to_date(concat(rq,sjd,"00"),"yyyymmddhhmiss")) in (5,6) then "非工作日"
else "工作日"
end as lx,
case when (substr(sjd,1,2)>=6 and substr(sjd,1,2)<9) then "早高峰"
when (sjd>=1630 and sjd<1930) then "晚高峰"
else "平峰"
end as sjd
from csdnsz_mda_prod.qy_od_5min ) a group by rq,lx,sjd,bh,qylx ) a2 group by rq,lx,sjd,bh,qylx
) a join
(
select rq,lx,sjd,bh,qylx,round(avg(rs),3) as jcrs from (
select substr(rq,1,6) as rq,lx,sjd,bh,qylx,sum(rs) as rs from (
select rq,size as qylx,bh,rs,
case when weekday(to_date(concat(rq,sjd,"00"),"yyyymmddhhmiss")) in (5,6) then "非工作日"
else "工作日"
end as lx,
case when (substr(sjd,1,2)>=6 and substr(sjd,1,2)<9) then "早高峰"
when (sjd>=1630 and sjd<1930) then "晚高峰"
else "平峰"
end as sjd
from csdnsz_mda_prod.qy_cll_5min ) a group by rq,lx,sjd,bh,qylx ) a1 group by rq,lx,sjd,bh,qylx
) b
on a.rq=b.rq and a.lx=b.lx and a.sjd =b.sjd and a.bh=b.bh and a.qylx=b.qylx


union all
select a.rq,a.lx,a.sjd,a.bh,a.qylx,round(b.jcrs/a.zrs,4)*100 as fdl from (

select rq,lx,sjd,bh,qylx,round(avg(rs),3) as zrs from (
select substr(rq,1,6) as rq,lx,sjd,bh,qylx,sum(rs) as rs from (
select rq,size as qylx,bh,rs,
case when weekday(to_date(concat(rq,sjd,"00"),"yyyymmddhhmiss")) in (5,6) then "非工作日"
else "工作日"
end as lx,
"全天" as sjd
from csdnsz_mda_prod.qy_od_5min ) a group by rq,lx,sjd,bh,qylx ) c group by rq,lx,sjd,bh,qylx) a join
(

select rq,lx,sjd,bh,qylx,round(avg(rs),3) as jcrs from (
select substr(rq,1,6) as rq,lx,sjd,bh,qylx,sum(rs) as rs from (
select rq,size as qylx,bh,rs,
case when weekday(to_date(concat(rq,sjd,"00"),"yyyymmddhhmiss")) in (5,6) then "非工作日"
else "工作日"
end as lx,
"全天" as sjd
from csdnsz_mda_prod.qy_cll_5min ) a group by rq,lx,sjd,bh,qylx ) a3 group by rq,lx,sjd,bh,qylx


) b
on a.rq=b.rq and a.lx=b.lx and a.sjd =b.sjd and a.bh=b.bh and a.qylx=b.qylx ) t;

蘇州城市大腦SQL語句--計算某個區域公交車的出行分擔率