SQL:Presto 中的交叉表等效项
SQL: Crosstab equivalent in Presto
我有一个 table 看起来像这样:
shop number work station accept create no.of entries
1 123 Maintain Arrive 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 123 Maintain WorkA 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 123 Maintain WorkB 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job Arrive 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job WorkC 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job WorkD 2019-10-11 0:00:00 2019-10-11 0:00:00 1
我想把它改成这样:
shop number work arrival_accept arrival_create worka_accept worka_create workb_accept workb_create workc_accept workc_create workd_accept workd_create no.of entries
1 123 Maintain 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 1
我知道在 postgres 中我们可以使用交叉表来实现这一点。但是,我无法用 Presto 做到这一点。我有办法做到这一点吗?
您可以使用条件聚合。如果你知道所有的电台,它看起来像:
select shop, number, work,
max(case when station = 'Arrive' then accept end) as arrive_accept,
max(case when station = 'Arrive' then create end) as arrive_create,
max(case when station = 'WorkA' then accept end) as workA_accept,
max(case when station = 'WorkA' then create end) as workA_create,
. . . -- and so on for the rest of the stations
from t
group by shop, number, work;
否则,您将需要动态构建查询以执行几乎相同的操作,但列数可变。
我有一个 table 看起来像这样:
shop number work station accept create no.of entries
1 123 Maintain Arrive 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 123 Maintain WorkA 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 123 Maintain WorkB 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job Arrive 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job WorkC 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job WorkD 2019-10-11 0:00:00 2019-10-11 0:00:00 1
我想把它改成这样:
shop number work arrival_accept arrival_create worka_accept worka_create workb_accept workb_create workc_accept workc_create workd_accept workd_create no.of entries
1 123 Maintain 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 1
1 1234 Job 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 2019-10-11 0:00:00 1
我知道在 postgres 中我们可以使用交叉表来实现这一点。但是,我无法用 Presto 做到这一点。我有办法做到这一点吗?
您可以使用条件聚合。如果你知道所有的电台,它看起来像:
select shop, number, work,
max(case when station = 'Arrive' then accept end) as arrive_accept,
max(case when station = 'Arrive' then create end) as arrive_create,
max(case when station = 'WorkA' then accept end) as workA_accept,
max(case when station = 'WorkA' then create end) as workA_create,
. . . -- and so on for the rest of the stations
from t
group by shop, number, work;
否则,您将需要动态构建查询以执行几乎相同的操作,但列数可变。