mysql - 如何选择获得超过特定票数的帖子?

标签 mysql sql join

我的表格结构:

// posts
+----+----------------------------------------+-----------+
| Id |                   body                 |  user_id  |
+----+----------------------------------------+-----------+
| 1  | content1                               | 2         |
| 2  | content2                               | 9         | 
| 3  | content3                               | 6         |
| 4  | content4                               | 4         | 
| 5  | content5                               | 2         |
| 6  | content6                               | 8         |
| 7  | content7                               | 4         | 
| 8  | content8                               | 2         | 
+----+----------------------------------------+-----------+

// votes
+----+---------+-------+
| id | post_id | value |
+----+---------+-------+
| 1  | 2       |  1    |
| 2  | 3       | -1    |
| 3  | 2       |  1    |
| 4  | 8       | -1    |
| 5  | 1       |  1    |
| 6  | 8       |  1    |
| 7  | 2       | -1    |
| 8  | 8       | -1    |
| 9  | 2       |  1    |
+----+---------+-------+

我需要选择总得分超过 1 的帖子。所以这是预期的输出:

+----+----------------------------------------+-----------+-------------+
| Id |                   body                 |  user_id  | total_votes |
+----+----------------------------------------+-----------+-------------+
| 2  | content2                               | 9         | 2           |
+----+----------------------------------------+-----------+-------------+

我该怎么做?

最佳答案

create table qanda
(   id int not null,
    body varchar(100) not null,
    user_id int not null
);
insert qanda values
(1,'a',2),
(2,'a',9),
(3,'a',6),
(4,'a',4),
(5,'a',2),
(6,'a',8),
(7,'a',2),
(8,'a',2);

create table votes
(   id int not null,
    post_id int not null,
    value int not null
);
insert votes values
(1,2,1),
(2,3,-1),
(3,2,1),
(4,8,-1),
(5,1,1),
(6,8,1),
(7,2,-1),
(8,8,-1),
(9,2,1);

查询

 select q.id,q.body,q.user_id,sum(v.value) as votes 
 from qanda q 
 join votes v 
 on v.post_id=q.id 
 group by q.id,q.body,q.user_id
 having votes>1;


+----+------+---------+-------+
| id | body | user_id | votes |
+----+------+---------+-------+
|  2 | a    |       9 |     2 |
+----+------+---------+-------+

关于mysql - 如何选择获得超过特定票数的帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403136/

相关文章:

mysql - 如何在 Rails rake 任务中将参数传递给 mysql 查询?

mysql - 获取一个月中每一天的值(value)

mysql - 对具有相互关联的行的 SQL 表进行排序

Mysql join 选择多列最佳实践

sql - month vs month查询(同表数据)

mysql 检查用户是否有超过 x 个事务或来自不同表的超过 x 的评级,并使用 where OR

mysql - 如何在SQL查询中对LEFT JOIN(多个表)进行排序?

sql - psql在聚合函数上过滤行

mysql - 有关过滤数据的 SQL 查询帮助

php - 使用 PHP、MYSQL、GROUP_CONCAT 和 JOIN 进行空间搜索