1

私がやりたいことは、データベース内の最高スコアのみの合計を取得し、カテゴリ別に並べ替えることです

ここに私のデータベーステーブルがあります

question_id  score1 score2 score3 category_id 
-----------  ------ ------ ------ -----------
   1           4      3       1        1
   2           5      2       9        2
   3           7      2       1        1
   4           1      5       6        2

結果に欲しいもの

it is only get the highest score to add
category_id 1 = score 11 (7+4)
category_id 2 = score 15 (9+6)

phpまたはmysqlを使用して解決する方法はありますか?

ありがとう

4

4 に答える 4

3

GREATESTそのためには関数が必要です。それぞれのグループのすべての合計の最大値を返します。

SELECT category_id, GREATEST(SUM(score1), SUM(score2), SUM(score3))
FROM mytable
GROUP BY category_id;

ところで、これは行ごとの最大値の合計を計算することとは異なります。そのためには、 と を逆にする必要がありGREATESTますSUM

于 2013-05-15T06:29:14.720 に答える
2

を使用GREATESTして、列の最大値を見つけてから、それSUMを超えることができます。

質問ごとの最高得点の合計が必要なのか、それとも全体の最高得点が必要なのかがはっきりしていないので、両方を追加します:)

これにより、質問ごとの最高スコアの合計が得られます。つまり、score1 が question1 で最高で、score2 が question2 で最高の場合、それらは合計されます。

SELECT category_id,SUM(GREATEST(score1,score2,score3))
FROM questions
GROUP BY category_id

でテストする SQLfiddle

これは、代わりに、score1、score2、score3 の最高合計スコアを提供します。つまり、score1 の合計が score2 の合計よりも高い場合、score1 の合計が返されます。

SELECT category_id, GREATEST(SUM(score1),SUM(score2),SUM(score3))
FROM questions
GROUP BY category_id

別の SQLfiddle

于 2013-05-15T06:29:19.097 に答える
1

それを行うための正しいクエリは次のようになると思います:

SELECT category_id, greatest(sum(score_1), sum(score_2), sum(score_3))
  from scores
  group by category_id;

これにより、列ごとに最大のスコアが得られます。

しかし、あなたはすることができます

SELECT category_id, sum(greatest(score_1,score_2,score_3))
  from scores
  group by category_id;

各行の最大値が必要な場合は、それらを合計します。

http://sqlfiddle.com/#!2/2d7a2/5でフィドルを確認できます

于 2013-05-15T06:27:57.067 に答える
0

これは役立つかもしれません、

SELECT SUM(score1+score2+score3) AS score, 
             category_id FROM table GROUP BY question_id ORDER BY score desc
于 2013-05-15T06:29:11.393 に答える