下記のようなデータがあり、sortの順番に並んでいます。
id,data,sort
----------
1,10,1
2,20,2
1,12,3
3,25,4
2,10,5
1,14,6
3,5,7
idの番号ごとにdataの数値を集計し、
idが最初に出現する行に、集計した数値を表示したいのですが、
どのように記述すれば、いいでしょうか?
id 1 の集計値は、10+12+14=36
id 2 の集計値は、20+10=30
id 3 の集計値は、25+5=30
id,data,sort,sum
----------
1,10,1,36
2,20,2,30
1,12,3
3,25,4,30
2,10,5
1,14,6
3,5,7
データはサンプルです。実際は、idは1から3までではなく、いくつあるか分かりません。
よろしくお願いいたします。
一例
-- サンプルデータ CREATE TEMPORARY TABLE T (id INT ,data INT, sort INT) ; INSERT INTO T VALUES (1,10,1) ,(2,20,2) ,(1,12,3) ,(3,25,4) ,(2,10,5) ,(1,14,6) ,(3,5,7) ; -- 集計 WITH v AS ( SELECT id, min(sort) sort, sum(data) "sum" FROM T GROUP BY id ) SELECT T.*, v.sum FROM T LEFT JOIN v USING(id, sort) ORDER BY T.sort ;
なぜなら、
データベースはExcelなどと違って順番を保証してはくれないため、
テーブルの設計からやり直さなければならないためです。
もう少し具体的に言えば、データベースに次の順番にデータを入れたとしても、
必ず同じ順番で出てくるとは限らないのです。
id,data
----------
1,10
2,20
1,12
3,25
2,10
1,14
3,5
呼び出すときは、例えばこんな風になるかもしれないのです。
id,data
----------
1,12
1,10
2,20
2,10
3,5
3,25
1,14
順番を確保したいのであれば、順番を示すカラムを別途用意しておく必要があるのです。
uid, id,data
----------
1,1,10
2,2,20
3,1,12
4,3,25
5,2,10
6,1,14
7,3,5
ユニークIDを通し番号や投稿時刻などにしておけば、
SQLのORDER BYで並びを必ず一定にできます。
繰り返しておきます。
どちらの質問も回答受付を一時中止にしておいて、よく考え直してください。
>なぜなら、
>データベースはExcelなどと違って順番を保証してはくれないため、
>テーブルの設計からやり直さなければならないためです。
文章がおかしい。
発言の撤回を望みます。
>id:windofjuly 様は、質問者に対して質問のキャンセルを求めることを繰り返し行っておられますが、これは「人力検索」サービスの信頼性を失わせる行為かと存じます。
>発言の撤回を望みます。
そんなことを書いている暇があれば回答の訂正をどうぞ。
役に立たない回答のほうが信頼性を失わせる行為ですから…。