6

だから私はこのようなテーブルを持っています:

id    mod    n1    n2    n3
1     1      1     1
1     2            2
1     3                  3
2     1      1
2     2            2
3     1      1

また、特定のIDのすべての行の各値を合計して列呼び出しの合計にしたいのですが、mod番号が異なるため、IDをグループ化したくありません。次のような結果が必要です。

id    mod   total
1     1     7
1     2     7
1     3     7
2     1     3
2     2     3
3     1     1

group byを使用すると、個々の行の合計だけが表示されるため、使用できません。どうすれば私が望む結果を達成できますか?

4

5 に答える 5

7

あなたはこのようなことをすることができます:

SELECT `table`.`id`, `mod`, mySum
FROM `table` 
JOIN (SELECT `id`, SUM(n1) + SUM(n2) + SUM(n3) AS mySum
        FROM `table` GROUP BY `id`) as grpTable
ON `table`.`id` = `grpTable`.`id`

しかし、これのパフォーマンスについてはよくわかりません...

于 2012-10-12T12:26:55.787 に答える
2

試す:

select t.id, t1.mod, t.total
from tab t1
join (select id, sum( IFNULL(n1,0)+ IFNULL(n2,0)+ IFNULL(n3,0)) as total
      from tab 
      group by id) t on t.id=t1.id
于 2012-10-12T12:27:53.913 に答える
1
SELECT `id`, `mod`, (SUM(n1) + SUM(n2) + SUM(n3)) AS total
FROM `table` 
 GROUP BY `id`,`mod`
于 2012-10-12T12:32:25.480 に答える
1

2番目の答えは正しかった、必要なのはifnull

select t.id, t1.mod, t.total
from test.source t1
join (select id, sum( IFNULL(n1,0)+ IFNULL(n2,0)+ IFNULL(n3,0)) as total
      from test.source 
      group by id) t on t.id=t1.id
于 2012-10-12T13:55:32.797 に答える
0

これはあなたのために働くはずです。Oracleで働いた。mysqlでキーワードを変更する必要があるかどうかを確認します。

SELECT x.id, x.mod, y.sum
  FROM table x,
       (SELECT id, sum(nvl(n1, 0) + nvl(n2, 0) + nvl(n3, 0)) sum
          FROM table
         GROUP BY id) y
 WHERE x.id = y.id;
于 2012-10-12T12:48:38.437 に答える