sql - 如何在 SQL 中计算点积

标签 sql postgresql statistics

这类似于 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/

相关文章:

r - 如何用 R 找到回归线上的最低值和最高值?

mysql子查询速度极慢

.net - 使用 SqlCommand 执行非查询,您可以获取通常发布到 "Messages"的文本吗?

mysql - SQLzoo JOIN 教程 #13

sql - 这个参数化查询是否对SQL注入(inject)开放?

sql - 按值(不是列)分组后从组中选择一个随机条目?

mysql - 级联删除,如 ON DELETE CASCADE 用于 MySQL 中的一次性操作

sql - 如何更新 n 行分区中的日期列?

用于收集集成统计信息的 java lib

python - 截距 scipy.stats.linregress 的标准误差