Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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_Aggregate Functions - Fatal编程技术网

如何将聚合SQL查询的结果插入到单独的表中

如何将聚合SQL查询的结果插入到单独的表中,sql,aggregate-functions,Sql,Aggregate Functions,我有一个带有索引的表,我正在使用sum执行一个聚合SQL查询 你可以在sqlfiddle中看到我在做什么 Create table TX ( i int NOT NULL PRIMARY KEY, x1 DECIMAL(7,3), x2 DECIMAL(7,3), x3 DECIMAL(7,3) ); INSERT INTO TX (i,x1,x2,x3) values (1,5, 6,6) ; INSERT INTO TX (i,x1,x2,x3) values (2,

我有一个带有索引的表,我正在使用sum执行一个聚合SQL查询 你可以在sqlfiddle中看到我在做什么

Create table TX (
  i int NOT NULL PRIMARY KEY,
  x1 DECIMAL(7,3), 
  x2 DECIMAL(7,3), 
  x3 DECIMAL(7,3)
);


INSERT INTO TX (i,x1,x2,x3) values
(1,5, 6,6) ;
INSERT INTO TX (i,x1,x2,x3) values
(2,6, 7, 5);
INSERT INTO TX (i,x1,x2,x3) values
(3,5, 6, 7) ;
INSERT INTO TX (i,x1,x2,x3) values
(4,6, 7, 4);
我的问题是如何将该查询的结果插入3个不同的表中

SELECT SUM(1),
       SUM(x1),SUM(x2),SUM(x3),
       SUM(x1*x1),
       SUM(x2*x1),SUM(x2*x2),
       SUM(x3*x1),SUM(x3*x2),SUM(x3*x3)

FROM TX
所以

我怎么能得到这样的东西

Sum(1)
-----
n

index  Sums
------------
1      4
2      22
3      26

index1  index2   Mult
----------------------
1            1   122
2            1   144
2            2   170
3            1   119
3            2   141
3            3   126
而不是

    SUM(1) SUM(X1) SUM(X2) SUM(X3) SUM(X1*X1) SUM(X2*X1) SUM(X2*X2) SUM(X3*X1) SUM(X3*X2)  SUM(X3*X3)
_____________________________________________________________________________________________________
        4      22       26     22        122        144       170      119          141          126
-请注意,数据的总和(第二次查询)与问题中的总和不匹配。我相信这是个打字错误

注意,我在第三个查询中有点懒惰。我没有写出展开图,而是先把桌子展平,然后把它自己连接起来

还要注意,在第一个查询中,
SUM(1)
可以替换为
COUNT(*)

-请注意,数据的总和(第二次查询)与问题中的总和不匹配。我相信这是个打字错误

注意,我在第三个查询中有点懒惰。我没有写出展开图,而是先把桌子展平,然后把它自己连接起来


还请注意,在第一个查询中,
SUM(1)
可以替换为
COUNT(*)

运行3个单独的查询。将选择转换为插入取决于RDBMS。对于SQL Server,只需在
FROM
子句之前的newTableName中添加一个
,以创建一个新的,或者在
SELECT
语句之前的
INSERT INTO existingTableName

Create table TX (
  i int NOT NULL PRIMARY KEY,
  x1 DECIMAL(7,3), 
  x2 DECIMAL(7,3), 
  x3 DECIMAL(7,3)
);


INSERT INTO TX (i,x1,x2,x3) values
(1,5, 6,6) ;
INSERT INTO TX (i,x1,x2,x3) values
(2,6, 7, 5);
INSERT INTO TX (i,x1,x2,x3) values
(3,5, 6, 7) ;
INSERT INTO TX (i,x1,x2,x3) values
(4,6, 7, 4);
查询1

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |
查询2

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |
查询3

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

运行3个单独的查询。将选择转换为插入取决于RDBMS。对于SQL Server,只需在
FROM
子句之前的newTableName
中添加一个
,以创建一个新的,或者在
SELECT
语句之前的
INSERT INTO existingTableName

Create table TX (
  i int NOT NULL PRIMARY KEY,
  x1 DECIMAL(7,3), 
  x2 DECIMAL(7,3), 
  x3 DECIMAL(7,3)
);


INSERT INTO TX (i,x1,x2,x3) values
(1,5, 6,6) ;
INSERT INTO TX (i,x1,x2,x3) values
(2,6, 7, 5);
INSERT INTO TX (i,x1,x2,x3) values
(3,5, 6, 7) ;
INSERT INTO TX (i,x1,x2,x3) values
(4,6, 7, 4);
查询1

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |
查询2

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |
查询3

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

SELECT COUNT(*) AS SUM1
FROM TX
| SUM1 |
--------
|    4 |
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX
| INDEX1 | SUMS |
-----------------
|     22 |   26 |
SELECT x.index1,
       x.index2,
       case x.id
       when 1 then SUM(x1*x1)
       when 2 then SUM(x2*x1)
       when 3 then SUM(x2*x2)
       when 4 then SUM(x3*x1)
       when 5 then SUM(x3*x2)
       when 6 then SUM(x3*x3)
       end Mult
FROM TX
CROSS JOIN
     (select 1 id, 1 index1, 1 index2 union all
      select 2 id, 2 index1, 1 index2 union all
      select 3 id, 3 index1, 1 index2 union all
      select 4 id, 2 index1, 2 index2 union all
      select 5 id, 3 index1, 2 index2 union all
      select 6 id, 3 index1, 3 index2) x
GROUP BY x.id, x.index1, x.index2
ORDER BY x.id
| INDEX1 | INDEX2 | MULT |
--------------------------
|      1 |      1 |  122 |
|      2 |      1 |  144 |
|      3 |      1 |  170 |
|      2 |      2 |  119 |
|      3 |      2 |  141 |
|      3 |      3 |  126 |

在同一个查询中是否有这样做的方法?可能创建一个视图,然后执行一个查询。您不能为每个查询生成多个结果集?!在SQL Server中,您可以创建一个将执行3次选择的过程。但它不是一个
视图
,它只是一个存储的查询定义。不过,遍历单独的结果集需要一些前端处理。我不理解你的最后一个问题。这是一个新问题吗?我没有得到10/3列的引用。在同一个查询中有没有这样做的方法?可能创建一个视图,然后执行一个查询。你不能每个查询生成多个结果集?!在SQL Server中,您可以创建一个将执行3次选择的过程。但它不是一个
视图
,它只是一个存储的查询定义。不过,遍历单独的结果集需要一些前端处理。我不理解你的最后一个问题。这是一个新问题吗?我没有得到10/3列的引用。我担心这是不正确的,例如look SUM(x3*x3)和not same 126,你的是484Ahh,很抱歉我错过了你想要的是产品的总和,而不是产品的总和sums@cMinor好的,我修正了我的第三个问题,我担心这是不正确的,例如look SUM(x3*x3)和126不一样,你的是484Ahh,对不起,我错过了你想要的是乘积的总和,而不是sums@cMinor好的,我修正了我的第三个问题