我有一个带有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 ......
答案 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
答案 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代码中,没有这样的列作为分数,但我认为创建一个带有动作的表格不会有问题。得分并加入总和(得分)