如何在mysql中获得最高分的SUM并按类别排序?

时间:2013-05-15 06:24:30

标签: php mysql

我想要做的是在我的数据库中获得仅得分最高的SUM并按类别排序

这是我的数据库表

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 个答案:

答案 0 :(得分:3)

你需要GREATEST功能;它返回了各自组中所有金额中最大的一笔。

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

顺便说一句,这与计算每行每个最大值的总和不同。为此,您需要撤消GREATESTSUM

答案 1 :(得分:2)

您可以使用GREATEST查找列的最大值,然后使用SUM;

如果您想要每个问题的最高得分总和,或者总得分最高,那么您还不是很明确,所以我会添加两个:)

这将为您提供每个问题得分最高的总和,也就是说,如果得分1在问题1上最高而得分2在问题2中最高,则将它们相加;

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

An SQLfiddle to test with

这将为您提供得分1,得分2和得分3的最高总得分,即如果得分1的总得分高于得分2的总数,则将返回得分1的总和;

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

Another SQLfiddle

答案 2 :(得分: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

中查看小提琴

答案 3 :(得分:0)

这可能会有所帮助,

SELECT SUM(score1+score2+score3) AS score, 
             category_id FROM table GROUP BY question_id ORDER BY score desc