hiveSql 相互关注问题
创始人
2024-02-26 20:49:40
0

hiveSql 相互关注问题

    • 说明
    • 需求
    • 分析
    • 优化
    • 实现
    • 最后

说明

普遍社交软件上会有关注功能,如何知道自己的关注是否也是关注了自己呢?

需求

求关注结果数据中,相互关注的用户对。
数据如下:
follow表;from_user:关注用户,to_user:被关注用户,timestamp:关注时间。

from_userto_usertimestamp
AB2022-11-28 12:12:12
AC2022-11-28 12:12:13
AD2022-11-28 12:12:14
BA2022-11-28 12:12:16
BE2022-11-28 12:12:16
CA2022-11-28 12:12:17
DA2022-11-28 12:12:18

分析

如果是互相关注,很容易想到表自关联,a.from_user 等于 b.to_user 且 a.to_user = b.from_user即可。具体sql如下:

select a.from_user,a.to_user
from follow a join follow b 
on a.from_user  = b.to_user 
and a.to_user = b.from_user  

这种方式确实可行,结果如下:
在这里插入图片描述

但是当数据量达到很大时候运行时相当慢的,有没优化的方法实现呢?看到这可以思考下如何优化!


优化

其实思路还是一样,知道是from_user 和 to_user正好两个用户互换字段而已。如果是互关用户 AB,在表中有如下数据:

from_userto_user
AB
BA

如果在表中能将其中一条数据用户名互换位置,另一条不动,再按照这两个字段分组计算数据条数,组内数据条数是2的就是互关用户了。这个思路不涉及到join操作。

from_userto_user
AB
AB

实现

有了上述优化思路,下面来实现下,如何将其中一条数据用户名互换位置呢,其实可以想到简单的一个真假逻辑判断就行了。如果一条满足逻辑则不变,另一条要确保一定不满足逻辑,交换位置即可,sql如下:

select from_user,to_user,if(from_user > to_user, concat(from_user,to_user),concat(to_user,from_user)) as concat_users
from follw

上述sql的if()中,这两条数据一定是一个满足一个不满足。即将其中一条数据用户名交换位置,完整sql如下:

select t1.from_user,t1.to_user
from(select t.from_user,t.to_user,sum(1) over(partition by t.concat_users) as flagfrom(select from_user,to_user,if(from_user > to_user, concat(from_user,to_user),concat(to_user,from_user)) as concat_usersfrom follw) t) t1where t1.flag = 2

结果如下:
在这里插入图片描述

最后

喜欢的点赞、关注、收藏吧~ 感谢支持~~

上一篇:InnoDB存储引擎简介

下一篇:12_AJAX

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...