在SQL中工作时,我有一个源系统和有访问权限的人的ID的数据集,简化后如下:
系统 | ID |
---|---|
sys2 |
create table mytable (Systems varchar(50),ID varchar(20)); insert into mytable values('Sys1','A'); insert into mytable values('Sys2','A'); insert into mytable values('Sys1','B'); insert into mytable values('sys2','C');
查询:
select ID, sum(case when Systems='Sys1' then 1 else 0 end)Sys1, sum(case when Systems='Sys2' then 1 else 0 end)Sys2 From mytable Group by ID
输出:
ID Sys1 Sys2 A 1 B 1 0 C 0 1 如果它仅限于少数系统值,则可以使用以下查询:
select ID , MAX(case when system = 'Sys1' then 1 else 0 end) Sys1 , MAX(case when system = 'Sys2' then 1 else 0 end) Sys2 , MAX(case when system = 'Sys3' then 1 else 0 end) Sys3 , MAX(case when system = 'Sys4' then 1 else 0 end) Sys4 , .... from table GROUP BY ID
如果您正在使用Spark,为什么不利用它的强大功能呢。读取数据帧中的数据,然后使用:
df.groupBy(col("ID")).pivot(col("System")).count().na.fill(0).show()