32

私はすでに(これを)読んでいますが、私の特定の問題にそれを実装する方法を理解できませんでした。私SUM()は集計関数であることを知っており、それをそのまま使用しないのは意味がありませんが、この特定のケースでは、SUM()すべての行を維持しながらすべての結果を取得する必要があります。

表は次のとおりです。

--ID-- --amount--
  1        23
  2        11
  3        8
  4        7

量を増やす必要がありますSUM()が、すべてのレコードを保持するため、出力は次のようになります。

--ID-- --amount--
  1        49
  2        49
  3        49
  4        49

このクエリがありましたが、すべての結果を合計するのではなく、各行を合計するだけです。

SELECT 
    a.id,
    SUM(b.amount)

FROM table1 as a 
JOIN table1 as b ON a.id = b.id
GROUP BY id

それがないと、SUM()1つの行しか返されませんが、すべてのIDを維持する必要があります...

注:はい、これは非常に基本的な例であり、ここでphpを使用してこれを行うことができますが、明らかにテーブルが大きく、行と列が多くなっていますが、それは重要ではありません。

4

5 に答える 5

21
SELECT a.id, b.amount
FROM table1 a
CROSS JOIN
(
    SELECT SUM(amount) amount FROM table1
) b

テーブル内のすべての行の合計値をそれぞれにデカルト結合する必要がありますid。副選択()の結果は1つしかないため、49基本的にはそれぞれに追加されますid

于 2012-07-06T07:31:17.490 に答える
6

サブクエリを使用して、元のテーブルを合計に結合します。

SELECT * FROM table1, (SELECT SUM(amount) FROM table1 AS amount) t
于 2012-07-06T07:29:28.347 に答える
0

これはsum()クエリを 1 つだけ実行するため、正常に実行されるはずです。

SELECT a.id, b.amount
FROM table1 a
cross join (SELECT SUM(amount) as amount FROM table1 AS amount) b
于 2012-07-06T07:35:03.820 に答える