SQL面试题挑战06:互相关注的人

目录

  • 问题:
  • SQL解答:

问题:

现在有一张relation表,里面只有两个字段:from_user和to_user,代表关注关系从from指向to,即from_user关注了to_user。现在要找出互相关注的所有人。


from_user    to_user
孙悟空          唐僧
唐僧            如来佛祖
唐僧            观音菩萨
观音菩萨         如来佛祖
唐僧            孙悟空
孙悟空          玉皇大帝
玉皇大帝        如来佛祖
如来佛祖         观音菩萨
如来佛祖         玉皇大帝
如来佛祖         唐僧
孙悟空          猪八戒
猪八戒            嫦娥
猪八戒           孙悟空
猪八戒           唐僧
猪八戒          沙僧
沙僧            猪八戒
沙僧            玉皇大帝
沙僧            孙悟空
沙僧            唐僧

SQL解答:

解答思路一:使用自关联即可,这种方式简单也最易理解。适合数据量不是很大的情况,因为会导致数据膨胀。


with tmp as
(
select '孙悟空' as from_user ,     '唐僧'   as to_user
union all
select '唐僧' as from_user ,     '如来佛祖'   as to_user
union all
select '唐僧' as from_user ,     '观音菩萨'   as to_user
union all
select '观音菩萨' as from_user ,     '如来佛祖'   as to_user
union all
select '唐僧' as from_user ,     '孙悟空'   as to_user
union all
select '孙悟空' as from_user ,     '玉皇大帝'   as to_user
union all
select '玉皇大帝' as from_user ,     '如来佛祖'   as to_user
union all
select '如来佛祖' as from_user ,     '观音菩萨'   as to_user
union all
select '如来佛祖' as from_user ,     '玉皇大帝'   as to_user
union all
select '如来佛祖' as from_user ,     '唐僧'   as to_user
union all
select '孙悟空' as from_user ,     '猪八戒'   as to_user
union all
select '猪八戒' as from_user ,     '嫦娥'   as to_user
union all
select '猪八戒' as from_user ,     '孙悟空'   as to_user
union all
select '猪八戒' as from_user ,     '唐僧'   as to_user
union all
select '猪八戒' as from_user ,     '沙僧'   as to_user
union all
select '沙僧' as from_user ,     '猪八戒'   as to_user
union all
select '沙僧' as from_user ,     '玉皇大帝'   as to_user
union all
select '沙僧' as from_user ,     '孙悟空'   as to_user
union all
select '沙僧' as from_user ,     '唐僧'   as to_user
)
select
a.from_user,
a.to_user,
if(b.from_user is not null, 1, 0) as is_friend -- 1:互相关注 
from tmp a
left join tmp b
on a.from_user=b.to_user and a.to_user=b.from_user
;

解答思路二:找到互相关注的人的规律,当他们是互相关注时,那么将from_user和to_user其中一个顺序调换位置后,from_user和to_user就一定会出现两条数据(源表提前已经去重),所有出现两条数据的人就是有互相关注的。这种方式不会导致数据膨胀。

with tmp as
(select '孙悟空' as from_user ,     '唐僧'   as to_user
union all
select '唐僧' as from_user ,     '如来佛祖'   as to_user
union all
select '唐僧' as from_user ,     '观音菩萨'   as to_user
union all
select '观音菩萨' as from_user ,     '如来佛祖'   as to_user
union all
select '唐僧' as from_user ,     '孙悟空'   as to_user
union all
select '孙悟空' as from_user ,     '玉皇大帝'   as to_user
union all
select '玉皇大帝' as from_user ,     '如来佛祖'   as to_user
union all
select '如来佛祖' as from_user ,     '观音菩萨'   as to_user
union all
select '如来佛祖' as from_user ,     '玉皇大帝'   as to_user
union all
select '如来佛祖' as from_user ,     '唐僧'   as to_user
union all
select '孙悟空' as from_user ,     '猪八戒'   as to_user
union all
select '猪八戒' as from_user ,     '嫦娥'   as to_user
union all
select '猪八戒' as from_user ,     '孙悟空'   as to_user
union all
select '猪八戒' as from_user ,     '唐僧'   as to_user
union all
select '猪八戒' as from_user ,     '沙僧'   as to_user
union all
select '沙僧' as from_user ,     '猪八戒'   as to_user
union all
select '沙僧' as from_user ,     '玉皇大帝'   as to_user
union all
select '沙僧' as from_user ,     '孙悟空'   as to_user
union all
select '沙僧' as from_user ,     '唐僧'   as to_user
)
select
from_user
,to_user
,count(1) over(partition by feature) as is_friend ---1:不是 2:是
from
(selectfrom_user,to_user--当有互相关注时,保证只将其中的一对用户调换from_user和to_user并拼接,if(from_user>to_user,concat(from_user,to_user),concat(to_user,from_user)) as featurefrom tmp
)t1
;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 安装 Selenium

方式1: 下载指定的Selenium版本;解压文件;使用cmd进入解压目录下执行命令:pip setup.py install。 方式2: 打开cmd命令输入pip install selenium指定版本号,pip install selenium2.48.0。 3. 方式3 此外&am…

【React Native】第一个Android应用

第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…

阶段七-GitEE

Git:版本控制软件 Git的优点 1.1 协同修改 多人并行不悖的修改服务器端的同一个文件。 1.2 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。 1.3 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据&…

猫头虎分享2023年12月17日博客之星候选--领域赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–领域赛道博主文章数据 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开…

单位圆内接三角形的角是外接三角

证明 ∠ A P C 2 ∠ A B C ∠APC2∠ABC ∠APC2∠ABC ∴ ∴ ∴ 三角形内角和为180 $∵ \begin{cases} ∠ABP∠BAP∠APB180 \∠ABC∠BAC∠ACB180 \∠PAC∠PCA∠APC180 \end{cases} $ ∴ A P B P P C r ∴APBPPCr ∴APBPPCr ∵ ∵ ∵△PAB和△PAC为等腰三角形 ∴ ∴ ∴等腰三…

Pandas 高级教程——多级索引

Python Pandas 高级教程:多级索引 Pandas 中的多级索引是一种强大的工具,用于处理具有多个维度或层次的数据。多级索引可以在行和列上创建层次结构,提供更灵活的数据表示和分析方式。在本篇博客中,我们将深入介绍 Pandas 中的多级…

IntelliJ IDEA 2023.3 安装教程

引言 IntelliJ IDEA,通常简称为 IDEA,是由 JetBrains 开发的一款强大的集成开发环境,专为提升开发者的生产力而设计。它支持多种编程语言,包括 Java、Kotlin、Scala 和其他 JVM 语言,同时也为前端开发和移动应用开发提…

【2023-12-25有感】你是一块顽石

从1998年11月出生,到2023年末,人生已完整过去25年,这是人生的三分之一。 我经常思考,人活着是为了什么。 有时候我很困,睡着了,早上被上班的闹铃闹醒,我极度的想要再睡一会,想必会…

这款APP,在离线环境下也能查看倾斜模型、点云等数据

《四维轻云-离线版》APP是基于移动端开发的轻量化地理空间数据应用平台,实现了用户对空间数据场景的制作和应用。 目前,已涵盖的数据类型包括倾斜模型(.osgb)、激光点云(.las)、正射影像(dom)、数字高程模型(dem)、矢量数据(shp)、人工模型(…

【开源】基于Vue+SpringBoot的贫困地区人口信息管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

利用 OpenAI API 进行文本聚类和标记

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号 原文标题:Text Clustering and Labeling Utilizing OpenAI API 原文地址:https://medium.com/kbd…

使用 OpenTelemetry 和 Loki 实现高效的应用日志采集和分析

在之前的文章陆续介绍了 如何在 Kubernetes 中使用 Otel 的自动插桩 以及 Otel 与 服务网格协同实现分布式跟踪,这两篇的文章都将目标聚焦在分布式跟踪中,而作为可观测性三大支柱之一的日志也是我们经常使用的系统观测手段,今天这篇文章就来体…

【AI】使用阿里云免费服务器搭建Langchain-Chatchat本地知识库

书接上文,由于家境贫寒的原因,导致我本地的GPU资源无法满足搭建Langchain-Chatchat本地知识库的需求,具体可以看一下这篇文章,于是我只能另辟蹊径,考虑一下能不能白嫖一下云服务器资源,于是去找网上找&…

Java BigDecimal 的舍入模式(RoundingMode)

BigDecimal 有 8 种 RoundingMode(舍入模式) ROUND_UP 进位制:不管保留数字后面是大是小 (0 除外) 都会进 1。结果会向原点的反方向对齐,正数向正无穷方向对齐,负数向负无穷方向对齐。 BigDecimal a new BigDecimal…

docker笔记2-docker 容器

docker 容器的运行 docker run 镜像名:版本标签: 创建 启动容器 docker run 镜像名 ,如果镜像不存在,则会在线下载镜像。 注意事项: 容器内的进程必须处于前台运行状态,不能后台(守护进程运行…

财务数据智能化:用AI工具高效制作财务分析PPT报告

Step1: 文章内容提取 WPS AI 直接打开文件,在AI对话框里输入下面指令: 假设你是财务总监,公司考虑与茅台进行业务合作、投资或收购,请整合下面茅台2021年和2022年的财务报告信息。整理有关茅台财务状况和潜在投资回报的信息&…

springboot 快速上手

Spring Boot是一个用于快速构建基于Spring的应用程序的开发框架。它简化了Spring应用程序的初始化和配置过程,提供了一种约定优于配置的方式来构建应用程序。 内嵌tomat、jetty可以生成可以独立运行的jar包,不需要打成war包。 简化配置,大部…

【PostGIS】在Java中操作postgis——使用springboot+Maven+mybatis框架

前言: PostgreSQL15对应PostGIS安装教程及空间数据可视化 空间数据库-常用空间函数 完成PostGIS的安装与配置后,让我们来写一个Java操作postgis数据库的demo吧~ 使用工具: NavicatIDEA 一、PostGIS数据库准备 在Navicat中新建一个postgr…

docker 镜像仓库harbor安装

1、windows安装: docker pull bitnami/harbor-registry 2、linux安装: K8s集群使用容器镜像仓库Harbor_k8s使用harbor-CSDN博客

Ubuntu系统如何安装SVN服务端并通过客户端无公网ip实现远程访问?

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…