【问题标题】:MySQL sum negative and sum of positive values without sub query没有子查询的MySQL总和负数和正值总和
【发布时间】:2012-01-28 00:15:47
【问题描述】:

我有两张表如下:

tbl_answers : id, (FK)authorID ...

tbl_answer_votes : id, (FK)voterID, (FK)answerID, vote (sInt, only ever -1 or 1) 

tbl_answers 与tbl_answer_votes 具有一对多关系,并且投票可以是负 1 或正 1。

我需要将 tbl_answer_votes 加入到 tbl_answers 上,但将对该答案的所有反对票的总和和对该答案的所有赞成票的总和作为两个单独的列。

我可以通过子查询来做到这一点,但因为它只是更大查询的一小部分,在阅读了子查询的陷阱之后,我想尝试从投票表中生成这两个负数和正数尽可能高效。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用CASE 和JOIN 来完成此操作:

    SELECT 
      a.id, 
      SUM(CASE v.vote when 1 then 1 else 0 end) as UpVotes,
      SUM(CASE v.vote when -1 then 1 else 0 end) as DownVotes
    FROM 
      tbl_answers a
    INNER JOIN 
      tbl_answer_votes v
    ON 
      v.id = a.id
    GROUP BY 
      a.id
    

    这将返回来自tbl_answers 的ID 以及来自tbl_answer_votes 的任一值的总票数的两列。您没有指定要从任一表中获得哪些(如果有)其他列,因此您可能必须调整 SELECT 和 GROUP BY 部分中的列列表以添加其他列。

    【讨论】:

      【解决方案2】:

      对不起,我没有时间。但在这里你可能需要稍微调整一下。

       select a.id, SUM(CASE WHEN v.vote = 1 Then 1 ELSE 0 END ), SUM(CASE WHEN (v.vote = -1) then 1 ELSE 0 end)
      from tbl_answers a
      inner join tbl_answer_votes v
          On a.id = v.asnwerId
      where a.id = 123
      group by a.id
      

      【讨论】:

        【解决方案3】:

        编写一个查询,返回投票总和,以及每个答案的投票计数。

        自从

        sum of votes = positive votes - negative votes
        count of votes = positive votes + negative votes
        

        你有

        positive votes = (count+sum)/2
        negative votes = (count-sum)/2
        

        所以只需将这些表达式添加到您的查询中。类似的东西

        SELECT answerID, (COUNT(*)+SUM(vote))/2 as upvotes,
                         (COUNT(*)-SUM(vote))/2 as downvotes
        FROM tbl_answer_votes
        GROUP BY answerID
        

        然后你应该可以参加连接部分了。

        【讨论】:

          猜你喜欢
          • 2014-02-01
          • 2011-03-31
          • 1970-01-01
          • 2019-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多