HQL面试题练习 —— 占据好友封面个数

news2024/10/5 14:16:35

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

题目来源:腾讯。

1 题目


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

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

朋友关系表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_steps

+---------------------+-------------------+
| user_steps.user_id  | user_steps.steps  |
+---------------------+-------------------+
| 1                   | 100               |
| 2                   | 95                |
| 3                   | 90                |
| 4                   | 80                |
| 5                   | 10                |
+---------------------+-------------------+

2 建表语句


-- 创建好友关系表
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);

3 题解


步骤一:获取自己的步数和好友的步数

select u1.user_id,
       u2.steps as user_steps,
       friend_id,
       u3.steps as friend_steps
from
    user_friend u1
left join
    user_steps u2
on u1.user_id=u2.user_id
left join
     user_steps u3
on u1.friend_id=u3.user_id

执行结果

在这里插入图片描述

步骤二:取出自己步数比好友步数多的记录。

select
    user_id,
    user_steps,
    friend_id,
    friend_steps
from
    (select u1.user_id,
           u2.steps as user_steps,
           friend_id,
           u3.steps as friend_steps
    from
        user_friend u1
    left join
        user_steps u2
    on u1.user_id=u2.user_id
    left join
         user_steps u3
    on u1.friend_id=u3.user_id)t
where user_steps>friend_steps;

执行结果

在这里插入图片描述

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

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 u1.user_id,
               u2.steps as user_steps,
               friend_id,
               u3.steps as friend_steps
        from
            user_friend u1
        left join
            user_steps u2
        on u1.user_id=u2.user_id
        left join
             user_steps u3
        on u1.friend_id=u3.user_id)t
    where user_steps>friend_steps)tt
where rn=1;

执行结果

在这里插入图片描述

步骤四:关联用户好友表,计算占据封面个数。

select
    ttt1.user_id,
    count(user_steps) 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 u1.user_id,
                   u2.steps as user_steps,
                   friend_id,
                   u3.steps as friend_steps
            from
                user_friend u1
            left join
                user_steps u2
            on u1.user_id=u2.user_id
            left join
                 user_steps u3
            on u1.friend_id=u3.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;

执行结果

在这里插入图片描述

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

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

相关文章

Windows 系统安装 VisualSVN Server

一.下载 VisualSVN Server VisualSVN-Server 是 SVN 版本控制中服务器端要使用的软件,就是我们提交代码存在安装这个软件的电脑上,它将很多配置和服务直接帮你完成,简单好用容易上手。VisualSVN Server有三个版本,社区版免费但限15个用户,另有一般和‘企业’两个收费版本…

打包idea代码至集群上运行

执行前记得在对应的节点上启动hdfs(start-dfs.sh )、yarn(start-yarn.sh)和任务历史服务(mapred --daemon start historyserver) 一、打包操作 1、在pom.xml中下载打包插件 直接将pom.xml里面的build删掉…

Python 和 Java 实现云计算的最终年项目

1、问题背景 目前,我正在进行我的最终年项目,计划用 Python 编写一个云计算系统,而云客户端将由我的团队成员使用 Java 来编写。这个云客户端将具有一个带有标签的界面,并提供文本编辑器、媒体播放器、几个基于 Java 的小游戏以及…

组件的注册和引用

在Vue中,开发者可以将页面中独立的、可重用的部分封装成组件,对组件的结构,样式和行为进行设置。组件是 Vue 的基本结构单元,组件之间可以相互引用。 一.注册组件 当在Vue项目中定义了一个新的组件后,要想在其他组件中…

交互式流程图组件DHTMLX Diagram v6.0 - 拥有更灵活的高度可定制功能

DHTMLX Diagram库允许用几行代码构建JavaScript流程图,通过自动布局和实时编辑器,它可以更容易地将复杂数据可视化到一个整洁的层次结构中。 DHTMLX Diagram v6.0版本发布,带来了众多令人兴奋的新功能和改进,使得这个JavaScript图…

App UI 风格,尽显魅力

精妙无比的App UI 风格

摄影店展示服务预约小程序的作用是什么

摄影店包含婚照、毕业照、写真、儿童照、工作照等多个服务项目,虽然如今人们手机打开便可随时拍照摄影,但在专业程度和场景应用方面,却是需要前往专业门店服务获取。 除了进店,也有外部预约及活动、同行合作等场景,重…

ROS socketcan_bridge使用说明

ROS socketcan_bridge使用说明(以ubuntu20.04为例) socketcan_bridge是什么 ROS针对socketcan提供了三个层次的驱动库,分别是ros_canopen,socketcan_bridge和socketcan_interface。 socketcan_interface: 功能&#x…

Docker:技术架构演进

文章目录 基本概念架构演进单机架构应用数据分离架构应用服务集群架构读写分离/主从分离架构冷热分离架构垂直分库微服务容器编排架构 本篇开始进行对于Docker的学习,Docker是一个陌生的词汇,那么本篇开始就先从技术架构的角度出发,先对于技术…

python词云生成库-wordcloud

内容目录 一、模块介绍二、WordCloud常用的方法1. generate(self, text)2. generate_from_frequencies(frequencies)3. fit_words(frequencies)4. generate_from_text(text) 三、进阶技巧1. 设置蒙版2. 设置过滤词 WordCloud 是一个用于生成词云的 Python 库,它可以…

6-Maven的使用

6-Maven的使用 常用maven命令 //常用maven命令 mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 …

问题:卫生事业的发展受多种因素的影响和制约,以下属于卫生事业发展影响因素的有(? ?)。 #微信#其他

问题:卫生事业的发展受多种因素的影响和制约,以下属于卫生事业发展影响因素的有(? ?)。 A、经济水平 B、管理水平 C、人口素质 D、科技发展 参考答案如图所示

全面解析:渗压计数据如何预测地下水趋势

随着人们对水资源日益增长的需求和对环境保护意识的提升,地下水位的监测和预测成为了水利工程和环境科学领域的重要研究内容。渗压计作为一种能够测量土壤或岩石中孔隙水压力的仪器,在地下水位的监测中发挥着关键作用。本文将从渗压计的工作原理、安装方…

Ubuntu系统安装docker以及安装yg系统所能使用到的插件

Ubuntu系统安装docker以及安装yg系统所能使用到的插件 前言:建议大家使用ubuntu系统的时候,直接永久关闭防火墙目前我们处于学习状态,这样有利于提高开发效率。 项目地址:https://github.com/xzhHas/yg 文章目录 Ubuntu系统安装do…

Windows搭建apache网站

1、官网下载安装包,注意下载服务器对应操作系统的安装包(此案例为64位操作系统) Apache VS17 binaries and modules downloadFor (business) webmasters, developers and home-users who want running always up to date Windows VS17 binar…

RK3568笔记三十:PP-ORCv3自训练部署

若该文为原创文章,转载请注明原文出处。 一、介绍 PP-OCR 是百度公布并开源的OCR领域算法,一个轻量级的OCR系统,在实现前沿算法的基础上,考虑精度与速度的平衡, 进行模型瘦身和深度优化,使其尽可能满足产业…

Django request.POST获取提交的表单数据

在Django中,request.POST 是一个特殊的属性,它是一个类似于字典的对象,用于访问通过POST方法提交的表单数据。如果你在视图中使用 print(request.POST.get(username)),这通常意味着你正在尝试从一个HTML表单中获取一个名为 userna…

映宇宙:多基础设施下,如何进行数据库选型升级|OceanBase 《DB大咖说》(五)

随着多基础设施成为行业发展的主流趋势,数据库选型时需要考虑哪些关键因素?对于云数据库的升级策略,又该如何制定?OceanBase《DB 大咖说》第五期特别邀请了映宇宙(原映客)的数据库负责人赵智博先生&#xf…

DENet:融合全局与局部,多模块策略,超越传统分割方法,提升青光眼筛查精度

DENet:融合全局与局部,多模块策略,超越传统分割方法,提升青光眼筛查精度 提出背景精细拆解A. 全局视网膜图像层面B. 视盘区域层面 提出背景 论文:https://arxiv.org/pdf/1805.07549 代码:https://github.…

使用mysqldump迁移MySQL数据

将Windows系统中MySQL数据导出到其他系统中MySQL数据库中 1.导出数据 进入MySQL安装目录的bin目录下,打开dos窗口执行以下命令 --single-transaction 参数表示不锁表 1.1 指定部分表导出 mysqldump -u用户名 -p密码 数据库名 表1 表2 表3 --single-transact…