Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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中计算点积_Sql_Postgresql_Statistics - Fatal编程技术网

如何在SQL中计算点积

如何在SQL中计算点积,sql,postgresql,statistics,Sql,Postgresql,Statistics,这类似于,但差异很大,我再次问。在我的情况下,提议的解决方案也将是不切实际的缓慢 注意:我还在红移中处理非常大的数据集 我试图计算一个统计模型的“分数”,它要求我为数据集中的每一行计算一个点积。特别是,我想在我的表“SCORE”中创建一个新列,将第一个表中每列的值乘以该列的预先指定值 例如,我有以下表格: 首字母 +--------+------+-------+ | NAME | COL0 | COL1 | +--------+------+-------+ | AL | 1

这类似于,但差异很大,我再次问。在我的情况下,提议的解决方案也将是不切实际的缓慢

注意:我还在红移中处理非常大的数据集

我试图计算一个统计模型的“分数”,它要求我为数据集中的每一行计算一个点积。特别是,我想在我的表“SCORE”中创建一个新列,将第一个表中每列的值乘以该列的预先指定值

例如,我有以下表格:

首字母

+--------+------+-------+
|  NAME  | COL0 | COL1  |
+--------+------+-------+
| AL     | 1    | 4     |
| BILL   | 2    | 5     |
| CATHY  | 3    | 6     |
+--------+------+-------+
+--------+------+-------+-------+
|  NAME  | COL0 | COL1  | SCORE |
+--------+------+-------+-------+
| AL     | 1    | 4     |  45   |
| BILL   | 2    | 5     |  60   |
| CATHY  | 3    | 6     |  75   |
+--------+------+-------+-------+
估计值

+--------+----------+
|  NAME  | ESTIMATE |
+--------+----------+
| COL0   | 5        |
| COL1   | 10       |
+--------+----------+
我想要最后一张桌子

决赛

+--------+------+-------+
|  NAME  | COL0 | COL1  |
+--------+------+-------+
| AL     | 1    | 4     |
| BILL   | 2    | 5     |
| CATHY  | 3    | 6     |
+--------+------+-------+
+--------+------+-------+-------+
|  NAME  | COL0 | COL1  | SCORE |
+--------+------+-------+-------+
| AL     | 1    | 4     |  45   |
| BILL   | 2    | 5     |  60   |
| CATHY  | 3    | 6     |  75   |
+--------+------+-------+-------+
对于最终表格,初始表格中每列的值乘以不同的数字,具体取决于估算表中列出的值 例如,AL的分数由1*5+4*10=45得出。其中5和10来自估算表


目前,我正在通过编写SQL代码来创建“分数”列,该代码手动写入估算值中的数字。

您可以通过加入表,然后使用条件聚合来完成此操作:

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;

您可以通过连接表,然后使用条件聚合来实现这一点:

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;

假设在使用案例进行数据透视时,估算表将始终显示为一行

SELECT i.name, i.col0, i.col1, (pest.mcol0*i.col0+pest.mcol1*i.col1) as score
FROM Initial
CROSS JOIN 
(select 
  max(case name when 'COL0' then estimate end) as mcol0, 
  max(case name when 'Col1' then estimate end) as mcol1 
 FROM estimates) Pest -- pivot Estimate

假设在使用案例进行数据透视时,估算表将始终显示为一行

SELECT i.name, i.col0, i.col1, (pest.mcol0*i.col0+pest.mcol1*i.col1) as score
FROM Initial
CROSS JOIN 
(select 
  max(case name when 'COL0' then estimate end) as mcol0, 
  max(case name when 'Col1' then estimate end) as mcol1 
 FROM estimates) Pest -- pivot Estimate

您可以通过以下方式连接表来完成此操作:

SELECT i.NAME,i.COL0,i.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,i.COL0,i.COL1 ORDER BY NAME;

请将此作为参考

您可以通过以下方式连接表格:

SELECT i.NAME,i.COL0,i.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,i.COL0,i.COL1 ORDER BY NAME;
请将此作为参考

如果您的数据集非常大且有许多列,则无论如何操作,您都需要为“不切实际的慢”做好准备。如果您的数据集非常大且有许多列,则无论如何操作,您都需要为“不切实际的慢”做好准备。