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;

顺便说一句,这与计算每行每个最大值的总和不同。为此,您需要反转GREATESTand 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 回答