基于另一行的唯一列数

时间:2018-09-27 16:46:11

标签: sql amazon-redshift

如果您有下表:

$roles = Role::whereHas('users', function($users) use($userId) {
    $users->where('id','=',$userId);
})->get();

我想得到这些结果

ID, item
1, A
2, A
1, A
1, B
3, C

每种项目类型应有一个列。在理想环境中,我不需要提前获得这些项目类型。

是否可以通过SQL查询执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以通过 sum()函数使用条件聚合:

select ID,
       sum(case when item = 'A' then 1 else 0 end ) as a,
       sum(case when item = 'B' then 1 else 0 end ) as b,
       sum(case when item = 'C' then 1 else 0 end ) as c
  from items
group by ID

Rextester Demo

答案 1 :(得分:1)

您正在描述枢纽功能。 Redshift目前不支持这些功能。

如果要将SQL结果传递给其他内容(例如pythonexcelChartio),则可以轻松地进行后续操作。但是在Redshift中,您必须手动执行上述sum函数。