我有一个带有索引的表,并且我正在使用sum执行聚合SQL查询,您可以看到我在sqlfiddle中执行的here操作。
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发布于 2012-11-16 10:15:24
SELECT SUM(1)
FROM TX;
SELECT 1, SUM(x1)
FROM TX
UNION ALL
SELECT 2, SUM(x2)
FROM TX
UNION ALL
SELECT 3, SUM(x3)
FROM TX;
SELECT a.x i1, b.x i2, SUM(a.s * b.s)
FROM
(
SELECT i, 1 x, x1 s
FROM TX
UNION ALL
SELECT i, 2 x, x2 s
FROM TX
UNION ALL
SELECT i, 3 x, x3 s
FROM TX
) a
INNER JOIN
(
SELECT i, 1 x, x1 s
FROM TX
UNION ALL
SELECT i, 2 x, x2 s
FROM TX
UNION ALL
SELECT i, 3 x, x3 s
FROM TX
) b ON a.i = b.i AND a.x >= b.x
GROUP BY a.x, b.x;SQL Fiddle using your data -请注意,您的数据的总和(第二个查询)与您的问题中的不匹配。我相信这是个打字错误。
请注意,我对第三个查询有点懒惰。我没有写出扩展,而是首先展平了表,并将其自身连接起来。
还要注意,在第一个查询中,可以用COUNT(*)替换SUM(1)。
发布于 2012-11-16 10:17:03
运行3个单独的查询。将SELECT转换为INSERT依赖于RDBMS。对于SQL Server,它只是在FROM子句之前添加INTO 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 |查询2
SELECT SUM(X1) index1, SUM(X2) sums
FROM TX| INDEX1 | SUMS |
-----------------
| 22 | 26 |查询3
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 |https://stackoverflow.com/questions/13409368
复制相似问题