mysql - 获取两个子查询的计数之间的差异

标签 mysql

我试图通过运行 SELECT (SELECT COUNT(vote_id) AS vote_up FROMvotes WHERE vote='UP'),(SELECT COUNT(vote_id) AS vote_down FROMvotesWHERE 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/

相关文章:

mysql如何根据hash key获取约束信息

mysql - 如何在 codeigniter 中使用 "MAX"?

php - 一个简单的 MySQL 插入/更新怎么会比外部 Web 请求慢呢?

javascript - 如何将数据库查询结果传递到Vue?

php - 数据库中的 SELECT 位值适用于 NAS,不适用于服务器

php - 需要帮助以根据现有 MySQL 数据以 php/html 形式显示选定的列表项

mysql - 当另一列具有相等值时对一列求和

MYSQL 搜索字符串是否包含特殊字符?

mysql - 获取MySQL路径

mysql - 如何在MySQL数据库中动态生成字符串实例?