こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

集計方法について教えて下さい。PHP+MYSQL

こんばんは。よろしくお願い致します。

データベースに下記のようなデータが入っています。

no point name
---------------------
123 100 aaa
123 50 aaa
124 100 bbb
130 30 ccc
131 80 ddd
131 100 ddd
131 20 ddd
133 10 eee

このデータを元に、下記のような結果を得たいのです。
noが同じデータのpointを集計し、まとめたレコードの件数をcount項目として欲しいです。

no point name count
------------------------------
123 150 aaa 2
124 100 bbb 1
130 30 ccc 1
131 200 ddd 3
133 10 eee 1

SQLだけで実現できるのでしょうか??
具体的にどのような方法で実現できるか、教えて頂けると有難いです。
よろしくお願い致します。

投稿日時 - 2013-04-01 19:04:46

QNo.8022482

すぐに回答ほしいです

質問者が選んだベストアンサー

元テーブルの設計が正規化してないのでNGですね
おそらくnoとnameの組み合わせが1対1だとおもうので
別テーブルを組んでnameを追い出してやるのが妥当

今回の例だとmysqlだとこんなんでなんとなく動いちゃいます。
select no,sum(point) as point,name,count(*) as count from hoge group by no
ただし、SQL文としてはあまりほめられた書き方ではありません。

投稿日時 - 2013-04-01 19:36:31

お礼

回答ありがとうございます。
教えて頂いたSQLでうまくいきました。
とても助かりました!

投稿日時 - 2013-04-02 08:47:45

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

select no, sum(point), name, count(no) from test group by no, name;

noが同じならnameも同じなのかな?
もし、違うのなら、例えば元データの1行目が以下だったら、
no point name
---------------------
123 100 xyz

セレクトの結果は以下になる。
no point name count
------------------------------
123 50 aaa 1
123 100 xyz 1
124 100 bbb 1
130 30 ccc 1
131 200 ddd 3
133 10 eee 1

投稿日時 - 2013-04-01 19:29:27

お礼

noが同じの場合、nameも同じになっています。

回答ありがとうございます。
おかげさまでとても助かりました。

投稿日時 - 2013-04-02 08:41:55

あなたにオススメの質問