Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一行中有多行(model.matrix等效)_Sql_Postgresql_Amazon Redshift - Fatal编程技术网

Sql 一行中有多行(model.matrix等效)

Sql 一行中有多行(model.matrix等效),sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,我有一个带有用户id和一些值的表: user_id | type | amount --------------------------- user1 | credit| 15 --------------------------- user1 | bill | 100 --------------------------- user1 | fraud | 10000 ---------------------------- user3 | fr

我有一个带有用户id和一些值的表:

user_id  |  type  |  amount
---------------------------
user1    |  credit|   15
---------------------------
user1    |  bill  |  100
---------------------------
user1    |  fraud |  10000
----------------------------
user3    |  fraud |   1000000
我的目标是每行有一个用户id:

user_id  | credit  |  bill  |  fraud  |
----------------------------------------
user1    |   15    |   100  |    10000
----------------------------------------
user3    |    0    |    0   |   1000000
我可以用CASE创建静态语句,但是我希望动态创建这个部分,因为在某些情况下,我有太多的类别

CASE WHEN type='credit' THEN amount ELSE 0 END AS credit,
CASE WHEN type='fraud' THEN amount ELSE 0 END AS fraud,
CASE WHEN type='bill' THEN amount ELSE 0 END AS bill
and max() and group by in following select().
如果您熟悉R语言,我正在寻找model.matrix()等效项

编辑
我正在寻找SQL/Redshift中的解决方案。我知道如何在R中执行此操作,但是R中处理的信息量太大。

正如我在问题中提到的,有一种简单的方法可以在SQL中展开列并创建虚拟变量,但是每个列都必须手动编码:

SELECT user_id,
CASE WHEN type='credit' THEN amount ELSE 0 END AS credit,
CASE WHEN type='fraud' THEN amount ELSE 0 END AS fraud,
CASE WHEN type='bill' THEN amount ELSE 0 END AS bill
FROM table1
GROUP BY user_id
我确信在Redshift中无法构造动态SQL,所以我在R中构建了整个查询,然后将其传递给Redshift:

1. Get all possible values from Type column:  

SELECT disctinct(type) from table1;
2. Create a dynamic query in R and execute it in Redshift.

您尝试过在R中使用从长到宽的格式吗?我不能使用R,因为我处理的数量太多了。我想在数据库中准备数据集,然后卸载其中的一部分。检查交叉表功能不幸的是,我在红移,但感谢链接。我现在很困惑。您需要R语言的解决方案还是SQL(或类似的DB语言)的解决方案?在R中,重塑范式将最有效。使用软件包整形2中的整形功能或dcast功能(更直观)。您还可以使用model.matrix替代方案。如果这是你想看到的方向,我可以告诉你怎么做。