我试图通过运行 SELECT (SELECT COUNT(vote_id) AS vote_up FROM
votes WHERE vote='UP'),(SELECT COUNT(vote_id) AS vote_down FROM
votesWHERE vote='DOWN'),(vote_up - vote_down AS vote_score)
。但是,当我尝试运行它时,它告诉我我没有正确的语法。我究竟做错了什么?
另外,有没有更好的写法?
最后,找到最高和最低票数的项目的理想方法是什么?我会只是 ORDER BY [above query]
吗?
最佳答案
你可以用
SELECT some_id
, SUM(
CASE
WHEN vote = 'UP'
THEN 1
WHEN vote = 'DOWN'
THEN -1
ELSE 0
END
) as vote_score
FROM votes
GROUP BY some_id
请注意,更好的方法是将 +1 或 -1 存储在投票中,然后您可以这样做:
SELECT some_id, SUM(vote) as vote_score
FROM votes
GROUP BY some_id
顺便说一句,如果您觉得我的格式很奇怪,我在 http://bentilly.blogspot.com/2011/02/sql-formatting-style.html 中进行了解释.
关于mysql - 获取两个子查询的计数之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904741/