当前位置: 首页 > 面试题库 >

如何从表中加入一个COUNT,然后通过另一个JOIN来影响该COUNT

冷英博
2023-03-14
问题内容

我有三表

Post

ID  Name
1   'Something'
2   'Something else'
3   'One more'

Comment

ID  PostId  ProfileID  Comment
1   1       1          'Hi my name is' 
2   2       2          'I like cakes'
3   3       3          'I hate cakes'

Profile

ID  Approved
1   1          
2   0          
3   1

我想计算发表评论的个人资料被批准的帖子的评论

我可以从Post中选择数据,然后从Comment fine中加入一个计数。但是此计数应取决于配置文件是否被批准。

我期望的结果是

评论数

PostId  Count
1       1
2       0
3       1

问题答案:

您可以像这样使用嵌套选择:

SELECT Post.Id, temp.Count
FROM Post
LEFT JOIN
(SELECT Post.Id, COUNT(Comment.ID) AS Count
FROM Post
LEFT JOIN Comment ON Comment.PostId = Post.ID
LEFT JOIN Profile ON Profile.ID = Comment.ProfileID
WHERE Profile.Approved = 1
GROUP BY Post.Id)
temp ON temp.Id = Post.ID

在没有帖子而不是没有记录的地方,这将使您为null:

1  1
2  null
3  1

只是为了改善这一点,您可以使用if来消除null

SELECT Post.Id, if(temp.Count >= 1,temp.Count,0) as newCount
FROM Post
LEFT JOIN
(SELECT Post.Id, COUNT(Comment.ID) AS Count
FROM Post
LEFT JOIN Comment ON Comment.PostId = Post.ID
LEFT JOIN Profile ON Profile.ID = Comment.ProfileID
WHERE Profile.Approved = 1
GROUP BY Post.Id) temp ON temp.Id = Post.ID

这会给您您最初想要的东西:

1  1
2  0
3  1

注意:不过,最有可能是更优雅的解决方案!!!!



 类似资料:
  • 问题内容: K,所以我有两个表: 我想从类别中获取所有信息,并计算每个类别中的问题数(question_id)。 假设,第一个类别(计费)将有一个问题,第二个类别(安全)将有3个问题。 我已经试过了: 问题答案: 您想这样做: 在将确保没有问题类别获得与数= 0上市

  • 问题内容: 我有两个表TABLE1看起来像: w / c的TABLE2看起来像: 我想通过比较来获得非现有名称与。 所以基本上,我必须获得第二行,w / c具有NN名称,该名称在中不存在,输出应如下所示: 我已经尝试过了,但是没有用: 并且仍在获取现有记录。 问题答案: 在这里没有帮助。 解决此问题的一种方法是使用:

  • 问题内容: 有2个表/实体,非常简单的场景。 表 诗人 -列:id,诗人,国家 表格 国家 -栏:编号,国家,计数 基本上, 国家 对 诗人 的映射自然是一对多的。例如,有来自60个国家的1000名诗人。在每个诗人 的诗人 被包含在国家之一的id民族领域分配给一个民族 国家 。 国家 的计数字段包含来自该国家的诗人中的 诗人 人数。 我的问题是如何仅使用一个SQL查询来按国家对 诗人 的人数进行计

  • 问题内容: 我以为这很简单,但我无法解决…… 我有一个表,它有列,,。 我还有一张桌子,它有列,。 我想的是使列等于具有相同的行数在。有点像这样: 有任何想法吗? 问题答案: 如果您的num列是有效的数字类型,则您的查询应按原样运行:

  • 问题内容: 我有这段代码可以从“ jobseeker”表中选择所有字段,并可以通过将userType设置为“ admin”来更新“ user”表,其中userID =$ userID(此userID是我用户中的一个用户数据库)。然后,该语句应将这些值从“ jobseeker”表插入到“ admin”表中,然后从“ jobseeker表”中删除该用户。sql表很好,我的语句正在将userType更改

  • 我试图在从一个表创建一个值后将其插入另一个表我有两个数据库“mem”和“location” 我想从mem表中添加主键id,并将其插入到位置表中的user_id列中。 我有一个sql查询在我的注册表单页面,自动递增'id'在mem表中,但似乎没有添加相同的值到位置表中的user_id, 有人能帮忙吗!