IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 计算相互关注类型的SQL -> 正文阅读

[大数据]计算相互关注类型的SQL

这是前一段时间某公司的面试题,有多种思路,我这里简单实现两种:

gift表: 代表着uidto_uid 送了礼物

uidto_uid
ab
ac
ad
ba
bc
db

follow表:代表uid关注了to_uid

uidto_uid
da
af
ar
bc
db
cb

要求的结果表为:

uidto_uidfollow_type
ab0/1/2/3

说明:

用户a给用户b刷了礼物,求用户a 与 用户b的互相关注类型,0代表两者互不关注,
1代表用户a关注了用户b,2代表用户b关注了用户a,3代表互相关注。

实现思路如下:

思路1:

SELECT tmp.uid,tmp.to_uid,sum(follow_type) follow_type
from (
SELECT
g.uid,g.to_uid,
CASE WHEN f.uid IS NULL THEN 0 ELSE 1 END AS follow_type
FROM gift g 
LEFT JOIN follow f 
ON g.uid = f.uid
AND g.to_uid = f.to_uid
UNION ALL
SELECT
g.uid,g.to_uid,
CASE WHEN f.uid IS NULL THEN 0 ELSE 2 END AS follow_type
FROM gift g 
LEFT JOIN follow f 
ON g.uid = f.to_uid
AND g.to_uid = f.uid
) tmp
GROUP BY tmp.uid,tmp.to_uid;

思路2 :

select 
uid,to_uid,follow_type
from(
SELECT
a.uid,a.to_uid,
case WHEN count(*)  over(partition by a.uid,a.to_uid) = 2 THEN 3
WHEN (fnv_hash(a.uid)- fnv_hash(a.to_uid)) = (fnv_hash(b.uid) - fnv_hash(b.to_uid)) THEN 1 
WHEN b.to_uid IS NULL THEN 0 
ELSE 2 END AS follow_type
FROM gift a 
LEFT JOIN follow b 
on fnv_hash(a.uid)+ fnv_hash(a.to_uid) = fnv_hash(b.uid) + fnv_hash(b.to_uid)
)tmp
group by uid,to_uid,follow_type
  • 注:fnv_hash()是Impala中计算hash值的函数,在hive中该函数为hash()
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:17:12  更:2021-07-27 16:17:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 5:29:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码