【发布时间】:2018-05-22 12:23:50
【问题描述】:
我有 2 张桌子 T1 和 T2。这里 T1 包含博客,T2 包含喜欢帖子的用户列表。
T1 数据库架构 post_id,post
与
T2 数据库架构 post_id,user_id
我只想选择那些至少有 10 位用户喜欢的帖子。
【问题讨论】:
标签: mysql
我有 2 张桌子 T1 和 T2。这里 T1 包含博客,T2 包含喜欢帖子的用户列表。
T1 数据库架构 post_id,post
与
T2 数据库架构 post_id,user_id
我只想选择那些至少有 10 位用户喜欢的帖子。
【问题讨论】:
标签: mysql
SELECT T1.post_id, T1.post, COUNT(T2.user_id]) as Total
FROM T1 JOIN T2 ON T1.post_id = T2.post_id
GROUP BY T1.post_id, T1.post
HAVING Total >= 10
【讨论】:
您可以对您的选择进行分组,然后使用having
SELECT posts.*, COUNT(likes.id) as likesCount
FROM posts, likes
GROUP BY posts.id HAVING (likesCount >= 10)
【讨论】:
在表 T2 中,出现超过 10 的 post_id 是您想要的帖子,因此您可以选择在表 T2 中至少出现 10 行 post_id 的帖子
【讨论】:
你可以使用子选择吗?
SELECT post_id,COUNT(post_id) AS count,
(SELECT post FROM T1 where post_id=T2.post_id) AS post
GROUP BY post_id
HAVING count >= 10
【讨论】:
为了获得最佳性能并避免“笛卡尔积”使用join,如下所示:
SELECT p.post_id, COUNT(l.user_id) AS TotalLikesCount
FROM posts AS p
JOIN likes AS l ON p.post_id = l.post_id
GROUP BY p.post_id
HAVING TotalLikesCount >= 10
【讨论】:
您可以使用加入来选择帖子。
SELECT p.post_id, p.post, count(pl.user_id) as likes
FROM `post` as p
join post_likes as pl on p.post_id = pl.post_id
where 1 group by pl.post_id
having likes >= 10;
【讨论】: