前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >meta大数据面试SQL-计算每个用户的受欢迎程度

meta大数据面试SQL-计算每个用户的受欢迎程度

作者头像
数据仓库晨曦
发布2024-06-27 20:34:23
740
发布2024-06-27 20:34:23
举报
文章被收录于专栏:数据仓库技术数据仓库技术

一、题目

有好友关系表t_friend,记录了user1_id,user2_id的好友关系对。现定义用户受欢迎程度=用户拥有的朋友总数/平台上的用户总数,请计算出每个用户的受欢迎程度。

代码语言:javascript
复制
+-----------+-----------+
| user1_id  | user2_id  |
+-----------+-----------+
| 1         | 2         |
| 1         | 3         |
| 1         | 4         |
| 1         | 5         |
| 2         | 3         |
| 2         | 4         |
| 3         | 4         |
| 4         | 5         |
| 5         | 6         |
| 5         | 7         |
| 7         | 8         |
| 9         | 10        |
+-----------+-----------+

二、分析

  1. 题目中数据user1_id,user2_id为互为好友关系,为关系对,即1与2是好友关系,则1-2,2-1记录只会存在一条,为方便计算,我们需要有两条记录。所以将user2_id与user1_id 互换,然后与原表进行union all;
  2. 对union all后的数据,按照user1_id分组,统计user2_id的个数,即user1_id 的好友数据,使用开窗计算出用户总数;

维度

评分

题目难度

⭐️⭐️⭐️

题目清晰度

⭐️⭐️⭐️⭐️⭐️

业务常见度

⭐️⭐️⭐️⭐️

三、SQL

1.user1_id,user2_id互换,然后进行union all。

执行SQL

代码语言:javascript
复制
select user1_id,
       user2_id
from t_friend
union all
select user2_id,
       user1_id
from t_friend

查询结果

代码语言:javascript
复制
+---------------+---------------+
| _u1.user1_id  | _u1.user2_id  |
+---------------+---------------+
| 1             | 2             |
| 2             | 1             |
| 1             | 3             |
| 3             | 1             |
| 1             | 4             |
| 4             | 1             |
| 1             | 5             |
| 5             | 1             |
| 2             | 3             |
| 3             | 2             |
| 2             | 4             |
| 4             | 2             |
| 3             | 4             |
| 4             | 3             |
| 4             | 5             |
| 5             | 4             |
| 5             | 6             |
| 6             | 5             |
| 5             | 7             |
| 7             | 5             |
| 7             | 8             |
| 8             | 7             |
| 9             | 10            |
| 10            | 9             |
+---------------+---------------+

2.计算每个用户的好友数,开窗计算出总用户数

执行SQL

代码语言:javascript
复制
with tmp as
         (select user1_id,
                 user2_id
          from t_friend
          union all
          select user2_id,
                 user1_id
          from t_friend)
select user1_id, 
       count(user2_id) as friend_cnt, 
       count(distinct user1_id) over () as total_cnt
from tmp
group by user1_id

查询结果

代码语言:javascript
复制
+-----------+-------------+------------+
| user1_id  | friend_cnt  | total_cnt  |
+-----------+-------------+------------+
| 10        | 1           | 10         |
| 9         | 1           | 10         |
| 8         | 1           | 10         |
| 7         | 2           | 10         |
| 6         | 1           | 10         |
| 5         | 4           | 10         |
| 4         | 4           | 10         |
| 3         | 3           | 10         |
| 2         | 3           | 10         |
| 1         | 4           | 10         |
+-----------+-------------+------------+

3.用户好友数除以总用户数计算最终结果

代码语言:javascript
复制
with tmp as
         (select user1_id,
                 user2_id
          from t_friend
          union all
          select user2_id,
                 user1_id
          from t_friend)
select user1_id,
       count(user2_id) /
       count(distinct user1_id) over () res
from tmp
group by user1_id

查询结果

代码语言:javascript
复制
+-----------+------+
| user1_id  | res  |
+-----------+------+
| 10        | 0.1  |
| 9         | 0.1  |
| 8         | 0.1  |
| 7         | 0.2  |
| 6         | 0.1  |
| 5         | 0.4  |
| 4         | 0.4  |
| 3         | 0.3  |
| 2         | 0.3  |
| 1         | 0.4  |
+-----------+------+

四、建表语句和数据插入

代码语言:javascript
复制
--建表语句
CREATE TABLE t_friend(
user1_id bigint COMMENT '用户1ID',
user2_id bigint COMMENT '用户2ID'
) COMMENT '好友关系表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
;
-- 插入数据
insert into t_friend(user1_id,user2_id)
values
(1,2),
(1,3),
(1,4),
(1,5),
(2,3),
(2,4),
(3,4),
(4,5),
(5,6),
(5,7),
(7,8),
(9,10)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
  • 二、分析
  • 三、SQL
    • 1.user1_id,user2_id互换,然后进行union all。
      • 2.计算每个用户的好友数,开窗计算出总用户数
        • 3.用户好友数除以总用户数计算最终结果
        • 四、建表语句和数据插入
        相关产品与服务
        大数据
        全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档