1

インデックス付きのテーブルがあり、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
4

2 に答える 2

3

3 つの個別のクエリを実行します。SELECT を INSERT に変換する方法は、RDBMS によって異なります。SQL Server の場合、句のINTO newTableName前に追加FROMして新しい句を作成するかINSERT INTO existingTableNameSELECTステートメントの前に追加するだけです。

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 |
于 2012-11-16T02:17:02.800 に答える
2
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 - データの合計 (2 番目のクエリ) が質問の合計と一致しないことに注意してください。これはタイプミスだと思います。

3 番目のクエリで少し怠けてしまったことに注意してください。展開を書き出す代わりに、最初にテーブルを平坦化し、それ自体に結合しました。

また、最初のクエリSUM(1)で を に置き換えることができることに注意してくださいCOUNT(*)

于 2012-11-16T02:15:24.330 に答える