加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 用于redshift数据库的数据透视表

发布时间:2020-12-12 06:41:27 所属栏目:MsSql教程 来源:网络整理
导读:我知道之前已经问过这个问题但是任何答案都无法帮助我达到我想要的要求.所以在新线程中提出问题 在redshift中,如何使用每个唯一维度集将数据转换为一行的形式,例如: id Name Category count8660 Iced Chocolate Coffees 1058660 Iced Chocolate Milkshakes 1
我知道之前已经问过这个问题但是任何答案都无法帮助我达到我想要的要求.所以在新线程中提出问题

在redshift中,如何使用每个唯一维度集将数据转换为一行的形式,例如:

id         Name               Category         count
8660     Iced Chocolate         Coffees         105
8660     Iced Chocolate         Milkshakes      10
8662     Old Monk               Beer            29
8663     Burger                 Snacks          18

id        Name              Cofees  Milkshakes  Beer  Snacks
8660    Iced Chocolate       105       10        0      0
8662    Old Monk             0         0        29      0
8663    Burger               0         0         0      18

上面列出的类别会不断变化.
Redshift不支持pivot运算符,case表达式没有多大帮助(如果没有请建议怎么做)

如何在红移中实现此结果?

(上面只是一个例子,我们将有1000个类别,这些类别一直在变化)

解决方法

我不认为在Redshift中有一种简单的方法可以做到这一点,

你还说你有超过1000个类别,而且这个数字还在增长
您需要考虑到每张桌子有1600列的限制,

见附件链接
[http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_usage.html][1]

您可以使用案例,但是您需要为每个类别创建案例

select id,name,sum(case when Category='Coffees' then count) as Cofees,sum(case when Category='Milkshakes' then count) as Milkshakes,sum(case when Category='Beer' then count) as Beer,sum(case when Category='Snacks' then count) as Snacks
from my_table
group by 1,2

你有的其他选择是将表上传到例如R,然后你可以使用cast函数.

cast(data,name~ category)

然后将数据上传回S3或Redshift

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读