首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯大数据面试SQL-占据好友封面个数

腾讯大数据面试SQL-占据好友封面个数

作者头像
数据仓库晨曦
修改于 2024-06-20 00:13:02
修改于 2024-06-20 00:13:02
16800
代码可运行
举报
文章被收录于专栏:数据仓库技术数据仓库技术
运行总次数:0
代码可运行

一、题目

有两个表,朋友关系表user_friend,用户步数表user_steps。朋友关系表包含两个字段,用户id,用户好友的id;用户步数表包含两个字段,用户id,用户的步数

查询:占据多少个好友的封面(在好友的列表中排行第一,且必须超过好友的步数)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- user_friend 数据
+----------+------------+
| user_id  | friend_id  |
+----------+------------+
| 1        | 2          |
| 1        | 3          |
| 2        | 1          |
| 2        | 3          |
| 2        | 4          |
| 2        | 5          |
| 3        | 1          |
| 3        | 4          |
| 3        | 5          |
| 4        | 2          |
| 4        | 3          |
| 4        | 5          |
| 5        | 2          |
| 5        | 3          |
| 5        | 4          |
+----------+------------+
--user_friend数据
+---------------------+-------------------+
| user_steps.user_id  | user_steps.steps  |
+---------------------+-------------------+
| 1                   | 100               |
| 2                   | 95                |
| 3                   | 90                |
| 4                   | 80                |
| 5                   | 10                |
+---------------------+-------------------+

二、题目分析

1.解题思路

  1. 查询出用户的步数和好友的步数;
  2. 取出自己步数比好友步数多的记录;
  3. 按照friend_id进行分组排序,取出步数第一名的用户好友记录
  4. 关联用户好友表,计算占据封面个数;

2.难度分析

维度 评分

维度

评分

题目难度

⭐️⭐️⭐️⭐️

题目清晰度

⭐️⭐️⭐️⭐️⭐️

业务常见度

⭐️⭐️⭐️⭐️⭐️

三、SQL

1.计算好友的朋友步数及好友自己的步数

执行SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--
select t1.user_id,
       t2.steps as user_steps, --自己步数
       t1.friend_id,
       t3.steps as friend_steps --好友步数
from user_friend t1
         left join user_steps t2
                   on t1.user_id = t2.user_id
         left join user_steps t3
                   on t1.friend_id = t3.user_id

执行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-------------+-------------+---------------+---------------+
| t1.user_id  | user_steps  | t1.friend_id  | friend_steps  |
+-------------+-------------+---------------+---------------+
| 1           | 100         | 2             | 95            |
| 1           | 100         | 3             | 90            |
| 2           | 95          | 1             | 100           |
| 2           | 95          | 3             | 90            |
| 2           | 95          | 4             | 80            |
| 2           | 95          | 5             | 10            |
| 3           | 90          | 1             | 100           |
| 3           | 90          | 4             | 80            |
| 3           | 90          | 5             | 10            |
| 4           | 80          | 2             | 95            |
| 4           | 80          | 3             | 90            |
| 4           | 80          | 5             | 10            |
| 5           | 10          | 2             | 95            |
| 5           | 10          | 3             | 90            |
| 5           | 10          | 4             | 80            |
+-------------+-------------+---------------+---------------+

2.取出自己步数比好友步数多的记录

执行SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select user_id,
       user_steps,
       friend_id,
       friend_steps
from (select t1.user_id,
             t2.steps as user_steps,  --自己步数
             t1.friend_id,
             t3.steps as friend_steps --好友步数
      from user_friend t1
               left join user_steps t2
                         on t1.user_id = t2.user_id
               left join user_steps t3
                         on t1.friend_id = t3.user_id) t
where user_steps > friend_steps

执行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----------+-------------+------------+---------------+
| user_id  | user_steps  | friend_id  | friend_steps  |
+----------+-------------+------------+---------------+
| 1        | 100         | 2          | 95            |
| 1        | 100         | 3          | 90            |
| 2        | 95          | 3          | 90            |
| 2        | 95          | 4          | 80            |
| 2        | 95          | 5          | 10            |
| 3        | 90          | 4          | 80            |
| 3        | 90          | 5          | 10            |
| 4        | 80          | 5          | 10            |
+----------+-------------+------------+---------------+

3.按照friend_id进行分组排序,取出步数第一名的用户好友记录

注意:这里使用了row_number,可以使用rank或者dense_rank 具体根据需要进行选择;

执行SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select user_id,
       user_steps,
       friend_id,
       friend_steps
from (select user_id,
             user_steps,
             friend_id,
             friend_steps,
             row_number() over (partition by friend_id order by user_steps desc ) rn
      from (select t1.user_id,
                   t2.steps as user_steps,  --自己步数
                   t1.friend_id,
                   t3.steps as friend_steps --好友步数
            from user_friend t1
                     left join user_steps t2
                               on t1.user_id = t2.user_id
                     left join user_steps t3
                               on t1.friend_id = t3.user_id) t
      where user_steps > friend_steps) tt
where rn = 1

执行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----------+-------------+------------+---------------+
| user_id  | user_steps  | friend_id  | friend_steps  |
+----------+-------------+------------+---------------+
| 1        | 100         | 2          | 95            |
| 1        | 100         | 3          | 90            |
| 2        | 95          | 4          | 80            |
| 2        | 95          | 5          | 10            |
+----------+-------------+------------+---------------+

4.关联用户好友表,计算占据封面个数;

执行SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select ttt1.user_id,
       count(ttt.friend_id) as fm_cnt
from user_friend ttt1
         left join(select user_id,
                          user_steps,
                          friend_id,
                          friend_steps
                   from (select user_id,
                                user_steps,
                                friend_id,
                                friend_steps,
                                row_number() over (partition by friend_id order by user_steps desc ) rn
                         from (select t1.user_id,
                                      t2.steps as user_steps,  --自己步数
                                      t1.friend_id,
                                      t3.steps as friend_steps --好友步数
                               from user_friend t1
                                        left join user_steps t2
                                                  on t1.user_id = t2.user_id
                                        left join user_steps t3
                                                  on t1.friend_id = t3.user_id) t
                         where user_steps > friend_steps) tt
                   where rn = 1) ttt
                  on ttt1.user_id = ttt.user_id
                      and ttt1.friend_id = ttt.friend_id
group by ttt1.user_id

执行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+---------------+---------+
| ttt1.user_id  | fm_cnt  |
+---------------+---------+
| 1             | 2       |
| 2             | 2       |
| 3             | 0       |
| 4             | 0       |
| 5             | 0       |
+---------------+---------+

四、建表语句和数据插入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 创建好友关系表
CREATE TABLE user_friend
(
    user_id   INT,
    friend_id INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

-- 插入数据
INSERT INTO user_friend
VALUES (1, 2),
       (1, 3),
       (2, 1),
       (2, 3),
       (2, 4),
       (2, 5),
       (3, 1),
       (3, 4),
       (3, 5),
       (4, 2),
       (4, 3),
       (4, 5),
       (5, 2),
       (5, 3),
       (5, 4);

CREATE TABLE user_steps
(
    user_id INT,
    steps   INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

INSERT INTO user_steps
VALUES (1, 100),
       (2, 95),
       (3, 90),
       (4, 80),
       (5, 10);
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hiveSQL-占据多少个好友的封面
有两个表,朋友关系表user_friend,用户步数表user_steps。朋友关系表包含两个字段,用户id,用户好友的id;用户步数表包含两个字段,用户id,用户的步数
数据仓库晨曦
2024/01/08
2070
hiveSQL-占据多少个好友的封面
腾讯大数据面试SQL-微信运动步数在好友中的排名
有两个表,朋友关系表user_friend,用户步数表user_steps。朋友关系表包含两个字段,用户id,用户好友的id;用户步数表包含两个字段,用户id,用户的步数.用户在好友中的排名
数据仓库晨曦
2024/06/27
2500
腾讯大数据面试SQL-微信运动步数在好友中的排名
HiveSql-微信运动在好友中的排名
有两个表,朋友关系表user_friend,用户步数表user_steps。朋友关系表包含两个字段,用户id,用户好友的id;用户步数表包含两个字段,用户id,用户的步数
数据仓库晨曦
2024/01/08
3210
HiveSql-微信运动在好友中的排名
腾讯大数据面试SQL-向用户推荐好友喜欢的音乐
用户关注表t_follow(user_id,follower_id)记录用户ID及其关注的人ID,请给用户1推荐他关注的用户喜欢的音乐名称
数据仓库晨曦
2024/06/17
1610
腾讯大数据面试SQL-向用户推荐好友喜欢的音乐
字节跳动大数据面试SQL-查询最近一笔有效订单
现有订单表t_order,包含订单ID,订单时间,下单用户,当前订单是否有效,请查询出每笔订单的上一笔有效订单
数据仓库晨曦
2024/06/17
2400
字节跳动大数据面试SQL-查询最近一笔有效订单
LeetCode面试SQL-用户购买平台
写一段 SQL 来查找每天 仅 使用手机端用户、仅 使用桌面端用户和 同时 使用桌面端和手机端的用户人数和总支出金额。
数据仓库晨曦
2024/09/24
4090
LeetCode面试SQL-用户购买平台
常见大数据面试SQL-近30天连续登陆3天以上次数-非开窗
有用户登录记录,已经按照日期去重。求近三十天,用户连续登录超过3天的次数,一直连续登录算一次,有间隔然后重新计算次数, 要求不能用开窗
数据仓库晨曦
2024/08/27
2810
常见大数据面试SQL-近30天连续登陆3天以上次数-非开窗
HiveSQL-面试题036 向用户推荐好友喜欢的音乐
用户关注表t_follow_036(user_id,follower_id)记录用户ID及其关注的人ID
数据仓库晨曦
2024/01/08
2530
HiveSQL-面试题036  向用户推荐好友喜欢的音乐
大数据SQL-查询最新有效订单记录
现有订单操作记录表t_order_log,包含用户ID,订单ID,操作状态,操作时间。该表中操作状态包含下单、取消、改单,三种状态,用户取消订单后,则该订单不能再做修改。
数据仓库晨曦
2025/06/26
1280
大数据SQL-查询最新有效订单记录
「SQL面试题库」 No_95 每次访问的交易次数
题目介绍: 每次访问的交易次数 number-of-transactions-per-visit
不吃西红柿
2023/10/16
2170
快手大数据面试SQL-用户中两人一定认识的组合数
有某城市网吧上网记录表,包含字段:网吧id,访客id(身份证号),上线时间,下线时间。
数据仓库晨曦
2024/06/17
1500
快手大数据面试SQL-用户中两人一定认识的组合数
最强最全面的大数据SQL面试题和答案(由31位大佬共同协作完成)
本套SQL题的答案是由许多大佬共同贡献,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法。本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦!
五分钟学大数据
2021/12/27
5.4K0
SQL题目
2、   • 当签到天数%7=3 则领取3金币   • 当签到天数%7=0 则领取7金币   • 其余情况,领取1金币
挽风
2023/10/17
3710
经典的SparkSQL/Hive-SQL/MySQL面试-练习题
32.查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
大数据学习与分享
2020/10/23
1.3K0
使用hql-统计连续登陆的三天及以上的用户
先对每个用户的登录日期排序,然后拿第n行的日期,减第n-2行的日期,如果等于2,就说明连续三天登录了。
孙晨c
2021/02/25
1.3K0
postgres多知识点综合案例
1、使用with临时存储sql语句,格式【with as xxx(), as xxx2() 】以减少代码;
西西嘛呦
2021/02/02
3610
Oracle最新的Sql笔试题及答案
1.编写SQL语句,查询PIM_HEADERS表,符合日期在2011-03-01和2011-03-25之间的PI订单,显示订单号,创建日志,订单客户名称,订单业务员名称
用户4919348
2019/04/02
1.4K0
HiveSQL-面试题032 共同使用ip用户检测问题
现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对;
数据仓库晨曦
2024/01/08
2490
HiveSQL-面试题032  共同使用ip用户检测问题
大数据面试SQL-奖金瓜分问题
在活动大促中,有玩游戏瓜分奖金环节。现有奖金池为 10000元,代表奖金池中的初始额度。用户的分数信息如下表。表中的数据代表每一个用户和其对应的得分,user_id 和 score 都不会有重复值。瓜分奖金的规则如下:按照 score 从高到低依次瓜分,每个人都能分走当前奖金池里面剩余奖金的一半,当奖金池里面剩余的奖金少于 250 时(不含),则停止瓜分奖金。现在需要查询出所有分到奖金的 user_id 和其对应的奖金。
数据仓库晨曦
2024/08/01
1530
大数据面试SQL-奖金瓜分问题
HiveSQL-面试题027 当天活跃用户当前连续活跃天数
有用户登录日志表,包含日期、用户ID,当天是否登录,请查询出当天活跃的用户当前连续活跃天数;
数据仓库晨曦
2024/01/08
3190
HiveSQL-面试题027 当天活跃用户当前连续活跃天数
推荐阅读
相关推荐
hiveSQL-占据多少个好友的封面
更多 >
交个朋友
加入程序员求职内推帮帮群
大厂内推绿色通道 求职攻略分享
加入云原生工作实战群
云原生落地实践 技术难题攻坚探讨
加入[架构及运维] 腾讯云技术交流站
云架构设计 云运维最佳实践
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档