MySQL查询 - 根据列获取计数总和

时间:2012-08-14 12:09:20

标签: mysql

我有一个带有actions和question_ids的mysql表。每个动作都有这样的分数:

     ACTION       | SCORE
downvote_question |  -1
upvote_question   |  +1
in_cardbox        |  +2

我想查询得分最高的问题,但我无法弄清楚。

http://sqlfiddle.com/#!2/84e26/15

到目前为止,我的查询是:

SELECT count(*), l1.question_id, l1.action 
FROM `log` l1
GROUP BY l1.question_id, l1.action

它给了我每个question_id所有累积的动作。

我想要的是:

QUESTION_ID | SCORE
     2      |   5
     1      |   4
     3      |   1
     4      |   1
     5      |   1

我无法弄清楚 - 我可能需要子查询,JOINS或UNIONS ......

3 个答案:

答案 0 :(得分:2)

也许你可以试试这个。

SELECT  a.question_id, sum(b.score) totalScore
FROM   `log` a INNER JOIN scoreValue b
          on a.`action` = b.actionname
group by a.question_id
ORDER BY totalScore DESC

SQLFiddle Demo

答案 1 :(得分:1)

你应该用sum(l1.score)替换count(*),因为sum将根据group by语句添加所有值

SELECT sum(l1.score), l1.question_id, l1.action 
FROM `log` l1
GROUP BY l1.question_id, l1.action

随着SQL Fiddle的持续得分(按问题分组):

SELECT 
sum(
  CASE WHEN l1.action = 'downvote_question' THEN -1 
  WHEN l1.action = 'upvote_question' THEN 1 
  ELSE 2 END
) score,
l1.question_id
FROM `log` l1
GROUP BY l1.question_id

答案 2 :(得分:0)

SELECT sum(SCORE), l1.question_id, l1.action 
FROM `log` l1
GROUP BY l1.question_id, l1.action

这是你想要的吗?

upd:在你的fidel代码中,没有这样的列作为分数,但我认为创建一个带有动作的表格不会有问题。得分并加入总和(得分)