【问题标题】:counting rows and joining tables计算行数和连接表
【发布时间】:2020-06-04 16:32:21
【问题描述】:

我有两张桌子,postpost_votepost 表存储一个 id。

post_vote 表存储了投票所属帖子的id、用户名和投票类型(upvote/downvote)。

每个表和其他表中还有其他列,但这些无关紧要。

我的问题:

我如何获得一个表格,其中包含来自post 表格的信息,以及来自post_vote 表格的赞成票和反对票的计数,并与它们所属的帖子相邻?

例子:

发帖:

+---------------------+
| post_id | title |...|
| 1       | ...   |...|
| 2       | ...   |...|
+---------------------+

post_vote:

+---------------------------------+
| post_id | voter_name | vote_type|
| 1       | user1      | UPVOTE   |
| 2       | user2      | DOWNVOTE |
+---------------------------------+

期望的查询结果:

+--------------------------------------------+
| post_id | title | ... | upvotes | downvotes|
| 1       | ...   | ... | 1       | 0        | 
| 2       | ...   | ... | 0       | 1        |
+--------------------------------------------+

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    post 加入到使用post_vote 中的条件聚合来计算选票的查询:

    select p.*, v.upvotes, v.downvotes
    from post p 
    left join (
      select post_id,
        sum(vote_type = 'UPVOTE') upvotes,
        sum(vote_type = 'DOWNVOTE') downvotes
      from post_vote
      group by post_id 
    ) v on v.post_id = p.post_id
    

    【讨论】:

      【解决方案2】:

      试试这个

      SELECT post.post_id, post.title, post.(...), (SELECT COUNT(vote_type) AS 'upvotes' FROM post_vote WHERE vote_type = 'upvote'), (SELECT COUNT(vote_type) AS 'downvotes' FROM post_vote WHERE vote_type = 'downvote') FROM post INNER JOIN post_vote ON post.post_id = post_vote.post_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 2011-01-12
        相关资源
        最近更新 更多