PostgreSQLの記述方法について教えてください。


下記のようなデータがあり、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までではなく、いくつあるか分かりません。
よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/18 11:00:15
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント199pt

一例

-- サンプルデータ
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
;
id:sunsunpapa

うまくいきました。ありがとうございました。

2013/03/18 10:59:30
id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント1pt
select id,data,sort,sum(data) from テーブル名 group by id;
id:windofjuly

select id,data,sort,sum(data) from テーブル名 group by id;


それのどこが質問文のような結果になりますか?
ポイント欲しさのいいかげん回答でないなら書き直しましょう。
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

2013/03/16 12:57:22
  • id:windofjuly
    うぃんど 2013/03/16 11:43:52
    質問を二つしておられますが、どちらかを受け付け中止にしたほうが良いです。

    なぜなら、
    データベースは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で並びを必ず一定にできます。

    繰り返しておきます。
    どちらの質問も回答受付を一時中止にしておいて、よく考え直してください。
  • id:sunsunpapa
    ありがとうございます。sortという項目に並んでいるという前提を追加しました。よろしくお願いいたします。
  • id:windofjuly
    うぃんど 2013/03/16 11:51:56
    SQLを処理するデータベースが何か(MySQL、PostgreSQL、ORACLE、MS-SQLServer・・・?)という情報も問題解決には必須です。
  • id:sunsunpapa
    データベースも追加させていただきました。どうぞよろしくお願いいたします。
  • id:taknt
    >質問を二つしておられますが、どちらかを受け付け中止にしたほうが良いです。

    >なぜなら、
    >データベースはExcelなどと違って順番を保証してはくれないため、
    >テーブルの設計からやり直さなければならないためです。

    文章がおかしい。

  • id:oil999
    id:windofjuly 様は、質問者に対して質問のキャンセルを求めることを繰り返し行っておられますが、これは「人力検索」サービスの信頼性を失わせる行為かと存じます。
    発言の撤回を望みます。
  • id:windofjuly
    うぃんど 2013/03/16 13:55:37
    >oil999 2013/03/16 13:44:49 Add Star
    >id:windofjuly 様は、質問者に対して質問のキャンセルを求めることを繰り返し行っておられますが、これは「人力検索」サービスの信頼性を失わせる行為かと存じます。
    >発言の撤回を望みます。

    そんなことを書いている暇があれば回答の訂正をどうぞ。
    役に立たない回答のほうが信頼性を失わせる行為ですから…。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません