首页 > 其他分享 >[每日一练]通过自连接实现混合列的筛选

[每日一练]通过自连接实现混合列的筛选

时间:2024-11-12 11:19:55浏览次数:3  
标签:null sub parent 连接 帖子 评论 筛选 混合 id

#该题目来源于力扣:

1241. 每个帖子的评论数 - 力扣(LeetCode)

题目要求:

表 Submissions :

+---------------+----------+
| 列名          | 类型     |
+---------------+----------+
| sub_id        | int      |
| parent_id     | int      |
+---------------+----------+
上表可能会出现重复的行。
每行可以是一个帖子或对该帖子的评论。
如果这是一篇帖子,则 parent_id 为 null。
如果这是一条评论,则 parent_id 对应帖子的 sub_id。
 

编写一个解决方案以查找每个帖子的评论数。

结果表应包含帖子的 post_id 和对应的评论数 number_of_comments 。

Submissions 可能包含重复的评论。你应该统计出每个帖子的 唯一评论 的数目。

Submissions 可能包含重复的帖子。你应该将它们视为一个帖子。

返回结果表应该按 post_id 升序排序。

结果格式如下例所示。

 

示例 1:

输入:
Submissions table:
+---------+------------+
| sub_id  | parent_id  |
+---------+------------+
| 1       | Null       |
| 2       | Null       |
| 1       | Null       |
| 12      | Null       |
| 3       | 1          |
| 5       | 2          |
| 3       | 1          |
| 4       | 1          |
| 9       | 1          |
| 10      | 2          |
| 6       | 7          |
+---------+------------+
输出:
+---------+--------------------+
| post_id | number_of_comments |
+---------+--------------------+
| 1       | 3                  |
| 2       | 2                  |
| 12      | 0                  |
+---------+--------------------+
解释:
表中 ID 为 1 的帖子有 ID 为 3、4 和 9 的三个评论。表中 ID 为 3 的评论重复出现了,所以我们只对它进行了一次计数。
表中 ID 为 2 的帖子有 ID 为 5 和 10 的两个评论。
表中 ID 为 12 的帖子没有评论。
表中 ID 为 6 的评论是对 ID 为 7 的已删除帖子的评论,因此我们将其忽略。

题目解释:

意思就是说,在针对全表进行去重之后,如果sub_id(帖子或评论的id列)对应的parent_id(评论的帖子id)为null,说明sub_id在列中是表示帖子的,如果sub_id对应的parent_id不为null,说明这里的sub_id是评论,而这里的parent_id就是评论的帖子id,对应的是parent_id为null的sub_id。现在要求统计每个帖子(非null的parent_id)被(对应parent_id为null的post_id)评论了多少次?

思路以及代码流程:

一步一步来:

首先,我们要求找到parent_id(被评论的帖子和评论列)为null的sub_id,就是sub_id(进行评论的帖子和评论)里是帖子的数据,然后把他和parent_id里不为null的值连接,这样就可以明确的区分parent_id列那个是评论,那个是帖子。也就是说,帖子无法评论,但可以被评论。评论可以评论,也可以被评论。

SELECT DISTINCT * 
FROM
Submissions A
#左连接,保留所有parent_id为null的数据,就是作为帖子的sub_id值
LEFT JOIN
Submissions B
#将A表作为帖子sub_id值与B表的parent_id值连接,这样就筛选出了B表的parent_id值为帖子
ON A.sub_id = B.parent_id
WHERE A.parent_id IS NULL

数据为:

| sub_id | parent_id | sub_id | parent_id |
| ------ | --------- | ------ | --------- |
| 1      | null      | 9      | 1         |
| 1      | null      | 4      | 1         |
| 1      | null      | 3      | 1         |
| 2      | null      | 10     | 2         |
| 2      | null      | 5      | 2         |
| 12     | null      | null   | null      |

由此可见,被连接的B表的parent_id就自动去除了所有的非帖子值,实现了数据的初步清洗。这时 候我们就可以发现被评论的parent_id 为7的数据消失了,因为它不是帖子,而是被评论的评论。

然后我们就可以根据A.sub_id(帖子名称)和B.sub_id(评论的名称)进行分组聚合了

SELECT A.sub_id AS post_id, count(DISTINCT B.sub_id) AS number_of_comments 
FROM
Submissions A
#左连接,保留所有parent_id为null的数据,就是作为帖子的sub_id值
LEFT JOIN
Submissions B
#将A表作为帖子sub_id值与B表的parent_id值连接,这样就筛选出了B表的parent_id值为帖子
ON A.sub_id = B.parent_id
WHERE A.parent_id IS NULL
GROUP BY A.sub_id
ORDER BY A.sub_id

标签:null,sub,parent,连接,帖子,评论,筛选,混合,id
From: https://blog.csdn.net/2302_77975940/article/details/143703668

相关文章

  • RAG检索性能提升实践:混合检索与自查询技术详解
    引言在RAG(检索增强生成)系统中,检索性能直接影响着最终的生成质量。本文将深入探讨两种先进的检索优化技术:混合检索和自查询检索。这些技术能显著提升检索的准确性和灵活性,为RAG系统带来实质性的性能提升。混合检索技术详解混合检索的核心原理混合检索通过集成多种检索算法,充分......
  • 在电脑使用有线网的前提下, 给电脑连接无线网并用这个无线网访问指定IP
    连接上无线网后cmd命令行使用ipconfig查看无线网的网关: 将下面的命令保存到.bat脚本中,使用windows管理员权限执行脚本添加一个自定义路由红色部分是你想要访问的目标IP,绿色部分是子网掩码(不用改),蓝色部分是你的无线网网关地址routeadd39.103.205.129mask255......
  • vm安装ubuntu 20.04 server并用vscode进行ssh远程连接
    最近写专业课作业需要用到vscode进行SSH连接ubuntuserver,自己摸索了一会终于实现效果,秉承着“取之于网络,还之于网络”的开源精神写了一篇总结博客,欢迎大家参考,如有不足之处也欢迎大家指出。文章参考:VSCodeSSH远程连接Ubuntu_visualstudio连接到本地unbuntu远程系统-CSDN博......
  • pytorch简单识别MNIST的全连接神经网络
    本文通过PyTorch框架来构建、训练以及评估一个简单的全连接神经网络,以便理解神经网络的基本结构,并通过实际操作获得第一手的经验。选择的任务是在经典的MNIST手写数字数据集上进行数字识别,这是学习深度学习不可或缺的一个实验。一、PyTorch概览PyTorch是一个开源的机器学习库,广......
  • 基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要        基于MIMO(Multiple-InputMultiple-Output)系统的SDR-AltMin混合预编码算法是一种先进的无线通信技术,它结合了凸优化和交替......
  • TCP最后一次握⼿连接阶段,如果ACK包丢失会怎样?
    2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》,探讨了大模型赋能下的研发变革及如何在公司和行业中落地,AI原生研发新范式的内涵和推动经验。......
  • navicat 连接记住密码忘记密码找回密码的方法
    今天oracle用户过期system用户密码忘了,幸亏服务器的navicat记住密码了。在网上找了好久找回密码的方法,记录一下。第一步  这个会在桌面上生成一个文件,在文件中找到  Password=   第二步在网上解密这个密码  importjavax.crypto.Cipher;importjavax.crypt......
  • 使用混合现实耳机HoloLens 2控制ROBOTIS-OP3人形机器人
    原文链接:https://www.youtube.com/watch?v=tO4vZnU4yF8 产品名称京东店铺ROBOTISOP3达尔文机器人DARWINOP3达尔文三代动态人形智能机器人高端机器人产品,适合各种比赛,原装进口https://item.jd.com/16196038169.html   您对此产品感兴趣,请联系......
  • visualvm远程连接Docker容器中部署的java应用并监控
    visualvm远程连接Docker容器中部署的java应用前言jdk1.8中自带了,java11中需要单独下载下载地址visualvm下载地址简介java虚拟机监控,故障排查及性能分析工具。网络配置局域网与docker内网打通,请参考:办公网络与Docker内网网络互通服务于网络服务名称节点IPj......
  • 海柔仿真系统存储实践:混合云架构下实现高可用与极简运维
    海柔创新是一家专注于箱式仓储机器人系统的研发和设计的科技公司,其仿真平台通过数字模拟技术,再现实际仓库环境和设备,利用导入的地图、订单、库存及策略配置等数据来验证和优化仓储解决方案,确保设计方案的效率和合理性。最初,海柔的仿真平台在单机环境中运行,但随着数据量的增长,运维......