这类似于 this post ,但足够不同,我再次询问。在我的情况下,建议的解决方案也会慢得不切实际。
注意:我还在 Redshift 中处理非常大的数据集。
我正在尝试计算统计模型的“分数”,这要求我计算数据集中每一行的点积。特别是,我想在表“SCORE”中创建一个新列,将第一个表中每一列的值乘以该列的预先指定值。
例如,我有下表:
初始
+--------+------+-------+
| NAME | COL0 | COL1 |
+--------+------+-------+
| AL | 1 | 4 |
| BILL | 2 | 5 |
| CATHY | 3 | 6 |
+--------+------+-------+
估计
+--------+----------+
| NAME | ESTIMATE |
+--------+----------+
| COL0 | 5 |
| COL1 | 10 |
+--------+----------+
我想要决赛 table ,
最终
+--------+------+-------+-------+
| NAME | COL0 | COL1 | SCORE |
+--------+------+-------+-------+
| AL | 1 | 4 | 45 |
| BILL | 2 | 5 | 60 |
| CATHY | 3 | 6 | 75 |
+--------+------+-------+-------+
对于最终表,INITIAL 表中每列的值都会乘以不同的数字,具体取决于 ESTIMATES 表中列出的值 例如,AL 的 SCORE 源自 1 * 5 + 4 * 10 = 45。其中 5 和 10 来自估计表。
目前,我正在通过编写 SQL 代码来创建 SCORE 列,该代码手动写入估计值中的数字。
最佳答案
您可以通过连接表然后使用条件聚合来完成此操作:
select i.name,
max(i.col0) * max(case when e.name = 'col0' then estimate end) as col0,
max(i.col1) * max(case when e.name = 'col1' then estimate end) as col1,
(max(i.col0) * max(case when e.name = 'col0' then estimate end) +
max(i.col1) * max(case when e.name = 'col1' then estimate end)
) as score
from initial i cross join
estimates e
group by i.name;
关于sql - 如何在 SQL 中计算点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460324/