欢聚笔试题求助帖

事情是这样的,这段时间一直在求职投简历,期望在暑假之前接到一份大数据开发的实习工作。投了很多公司,然后就收到了欢聚的笔试邀约,HR说要我一天之内做出来,恰巧第二天还有组会要汇报,我就先放下了,打算开完组会,下午再做,也没有超时。
09D16BF9.jpg
拿到的笔试题是一份pdf的建表语句什么的需要自己手动输入,而且建表语句中存在一些小坑。
这是需要使用hive sql回答的一份笔试题。
建表语句如下:
1、班级课后统计表–ls表
表定义的最后不应该有逗号(原表中一个最大的错误,困扰了我很久,没有发现)

CREATE TABLE IF NOT EXISTS tb_class_lesson_stat
(
class_id BIGINT COMMENT '大班ID',
class_name STRING COMMENT '大班名称',
uid BIGINT COMMENT '学生uid',
be_attend BIGINT COMMENT '10-到课;20-未到课',
attend_duration BIGINT COMMENT '到课总时长',
be_complete BIGINT COMMENT '10-完课;20-未完课',
term STRING COMMENT '平台类型:1-android;2-ios;3-web',
be_late BIGINT COMMENT '10-正常;20-迟到',
late_duration BIGINT COMMENT '迟到时长',
be_leave_early BIGINT COMMENT '10-未早退;20-早退',
leave_early_duration BIGINT COMMENT '早退时长'
)COMMENT '班级课后统计表'
PARTITIONED BY(dt STRING);

2、班级信息表–ci表

CREATE TABLE IF NOT EXISTS tb_class_info
(
class_id BIGINT COMMENT '⼤班ID',
class_name STRING COMMENT '⼤班名称',
class_no STRING COMMENT '课程期号',
class_type STRING COMMENT '业务类型:10-体验;20-正式;30-测试;40-其他',
class_start_time STRING COMMENT '开课时间,格式2020-01-01 :13:00:00'
)
COMMENT '班级信息表';

3、作业统计表–hs表

CREATE TABLE IF NOT EXISTS tb_homework_stu_stat
(id BIGINT,class_id BIGINT COMMENT '大班id',uid BIGINT COMMENT '学生uid',status BIGINT COMMENT '作业状态0,未提交,20-已提交,10-已批改',score BIGINT COMMENT '作业得分,每题批改都更新分数,默认0',comment STRING COMMENT '作业总评,json方式存储',push_status BIGINT COMMENT '推送状态,0未推送(默认),1-作业已推送,2-报告已推送',submit_time STRING COMMENT '作业提交时间时间',deadline STRING COMMENT '作业提交截止时间',create_time STRING COMMENT '创建时间',updateby BIGINT,update_time STRING COMMENT '更新时间',type BIGINT COMMENT '作业类型:0课后作业,10摸底测,20周测',comment_status BIGINT COMMENT '批改状态,0未批改(默认),10暂存,20已批改,30出门测')COMMENT '作业统计表';

4、作业报告查看记录表–re表

CREATE TABLE IF NOT EXISTS tb_report_expo
(class_id BIGINT COMMENT '大班id',uid BIGINT COMMENT '用户id',report_type BIGINT COMMENT '报告类型,1作业报告曝光'
) 
COMMENT '作业报告查看记录表'

第一题,求所有已开课的正式课班级的学生到课数据统计

解释:已开课:开课时间小于当前时间则为已开课;
正式课:class_type=20
需求列表:
具体字段如下:
image.png
我的答案:

SELECT ci.class_id,ci.class_no,ci.class_name,COUNT(DISTINCT ls.uid) AS `应到学生总数`,SUM(IF(ls.be_attend = 10,1,0)) AS `到课学生数`,AVG(IF(ls.be_attend = 10,ls.attend_duration,0)) `人均到课时长`
FROM tb_class_info ci
JOIN tb_class_lesson_stat ls 
ON  ci.class_id = ls.class_id
WHERE ci.class_type = 20 ANDci.class_start_time < CURRENT_TIMESTAMP()
GROUP BY ci.class_id, ci.class_no, ci.class_name;

我的思路:
求所有已开课的正式课班的学生到课数据统计,
主要是聚焦两张表,班级课后统计表–ls表和班级信息表–ci表,关联条件就是“大班ID”。这道题要说难的话,我认为有两点:
一是,字段比较难把握,但是这个其实还好,题目中已经给了需求字段,前三个字段直接写上。“应到学生数”,就是课程id关联上的,ls表中学生id,去重计数就是应到学生数了;“到课学生数”,在ls表中有个字段“be_attend”为“10”时,对满足条件的行求和就是“应到学生数”了;“人均到课时长”,是用到avg函数,当“be_attend”为“10”时,加上“ls.attend_duration”字段数值,也就是到课时长,否则就加0。
二是,已开课如何表示?题目中已经提示了,时间小于现在时间,如何表示现在的时间了,sql中与时间相关的函数是date,timestamp类似的单词,在这里我用到的是current_timestamp。
至此,拼接上述思路,我的答案就出来了,对了记得group by一下班级,为了准确度,同时分组一下班级id、班级no和班级名。

第二题, 求到课用户的课后作业完成情况

需求字段如下:
image.png
我的答案:

SELECT ci.class_id,ci.class_no,ci.class_name,COUNT(DISTINCT ls.uid) AS `到课学生数`,COUNT(DISTINCT CASE WHEN (hs.push_status = 1 OR hs.push_status = 2) THEN hs.uid ELSE NULL END) AS `下发作业学生数`,COUNT(DISTINCT CASE WHEN (hs.status = 20 OR hs.status = 10)  THEN hs.uid ELSE NULL END) AS `完成作业学生数`,COUNT(DISTINCT CASE WHEN hs.push_status = 2 THEN hs.uid ELSE NULL END) AS `下发报告学生数`,COUNT(DISTINCT CASE WHEN re.report_type = 1 THEN re.uid ELSE NULL END) AS `查看报告学生数`
FROM tb_class_info ci
JOIN tb_class_lesson_stat ls ON ci.class_id = ls.class_id AND ls.be_attend = 10
LEFT JOIN tb_homework_stu_stat hs ON ci.class_id = hs.class_id AND hs.type = 0
LEFT JOIN tb_report_expo re ON ci.class_id = re.class_id
GROUP BY ci.class_id, ci.class_no, ci.class_name;

求到课(ls.be_attend = 10)用户的课后作业(hs.type=0)完成情况。
我的思路:
这一题虽然看起来很复杂,应该是要连接四张表,才可以知道用户的课后作业的各种情况,而且需求字段看起来也好复杂的。别急慢慢来,一个一个看,而且需求字段中,其实已经提示我们字段所在位置,以及属性值。
(上个题目说过的字段就不在重复说了)
“下发作业学生数”:hs.push_status字段的值为1和0,在这里,我用到了一个case when函数,如果满足条件,就输出hs.uid,否则输出NULL,然后对所有的uid去重求和就可以了。
其实剩余所有的字段都可以有相同的方法求出来,我的方法就是这么做的。

第三题, 求每个学生首个上课的正式课信息

即每个学⽣第⼀次上的正式课,根据上课时间排序,取第⼀个。例如⼀个学⽣2023801,2023802,
2023803分别上了课,只需保留2023801那节课的class_id、class_no等信息。
需求字段如下:
image.png

SELECT uid,first_lesson_month,class_id,class_no,class_name
FROM (SELECT ls.uid,DATE_FORMAT(ci.class_start_time, 'yyyy-MM') AS first_lesson_month,ci.class_id,ci.class_no,ci.class_name,ROW_NUMBER() OVER(PARTITION BY ls.uid ORDER BY ci.class_start_time) as rnFROM tb_class_lesson_stat lsJOIN tb_class_info ci ON ls.class_id = ci.class_id AND ci.class_type = 20          
) t
WHERE t.rn = 1;

求每个学生首个上课的正式课信息
我的思路:
“首个”上课信息,我一开始并不知道如何解决,百度了一下知道可以用min函数或者排序函数就行了,还有开课的月份,对于时间如何转变为年月呢。首先对于uid使用row_number开窗函数,按开课时间排序,然后排序为1的这一行就可以了。然后select出需求字段的值就行。

ps:后记

发这篇求助帖,第一个原因是因为笔试没有通过,我也不知道正确的答案是什么,希望有大神看到可以告诉我一下我错在哪里了,好让我可以改正一下(球球了🥺)。虽然我问了HR可否发一下正确答案,但是HR可能怕答案泄漏并没有发我。
第二个原因是想记录一下我第一次参加笔试,虽然是凉了。没事继续刷题吧,主要是自己的功夫还没有到家。
小刘,要继续加油呀
060C1F27.gif

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

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

相关文章

2024年信息素养大赛图形化编程、Python、算法创真题汇总

2024年信息素养大赛编程赛道初赛&#xff08;Scratch图形化编程、Python、C算法创意&#xff09;已经结束&#xff0c;根据Scratch实验室的了解全国青少年信息素养大赛初赛晋级及初赛成绩内容如下&#xff1a; 1.参赛选手将在 5 个工作日(节假日不计在内)内&#xff0c;通过信…

在docker中ubuntu的apt-get慢的优化办法

apt-get慢的优化办法 1. 选择一个更快的镜像源2.使用 apt-get 的 Acquire::http 选项3. 其他通用优化4.修改 /etc/apt/sources.list.d/debian.source5.如果 /etc/apt/sources.list.d/ 中有多个文件6.在 Docker 中修改源(debian修改办法) 1. 选择一个更快的镜像源 Debian&#…

K8s-yaml文件

一.Yaml文件详解&#xff1a; Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语…

14、设计模式之访问者模式

访问者模式 在访问者模式&#xff08;Visitor Pattern&#xff09;中&#xff0c;我们使用了一个访问者类&#xff0c;它改变了元素类的执行算法。通过这种方式&#xff0c;元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式&#xff0c;元…

汽车IVI中控开发入门及进阶(十八):显示技术之Frame Buffer帧缓冲器

Frame Buffer帧缓冲器(帧缓冲器,有时是帧存储器)是随机存取存储器(RAM)的一部分,包含驱动视频显示器的位图。它是一个内存缓冲区,包含表示完整视频帧中所有像素的数据。现代视频卡的核心包含帧缓冲电路。该电路将内存中的位图转换为可以在计算机监视器上显示的视频信号。…

每日5题Day9 - LeetCode 41 - 45

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 今天这道题没有ac&#xff0c;写不动了&#xff0c;下次再通过吧&#xff0c;先给个半成品下次回…

MySQL主从复制+读写分离(ShardingJDBC)

MySQL主从复制读写分离 MySQL主从复制介绍二进制日志&#xff1a; MySQL的主从复制原理如下搭建主从复制准备工作主库配置从库配置 测试 读写分离案例ShardingJDBC介绍数据库环境初始工程导入读写分离配置测试1). 保存数据2). 修改数据3). 查询数据4). 删除数据 MySQL主从复制 …

音频数据集大全(2)-语音合成

1、Speechocean762 简介&#xff1a;一个开源语音语料库&#xff0c;专为发音评估设计。该语料库包含来自250名非母语人士的5000个英语发音&#xff0c;其中一半的人是儿童。五位专家对每个发音进行了句子级、词级和音素级的注释。 该语料库允许用于商业和非商业目的。 下载…

adb 汇总

常用命令 adb devices 查看链接设备列表 adb kill-server 关闭并清楚所有链接 adb connect 设置链接 adb tcpip 该条命令是设置网络adb监听的端口&#xff0c;5555是默认&#xff0c;也可以设置其他的&#xff0c;在安卓设备重启后会失效&#xff0c;不需要root权限&#x…

vue 拷贝

在 Vue.js 中,拷贝对象或数组是常见的操作,尤其是在处理状态管理或数据变更时。Vue 2 和 Vue 3 都提供了多种方法来实现对象和数组的拷贝。以下是详细的说明和示例: Vue 2 中的拷贝 1. 浅拷贝 浅拷贝只复制对象或数组的第一层属性,深层属性仍然引用原对象或数组。 使用 …

【C++】多态(多态的原理)

在本篇博客中&#xff0c;作者将会带领你深入理解C中的多态。 声明&#xff01;&#xff01;&#xff01;本代码以及讲解都是在32位机器下进行完成的&#xff0c;64位机器下会有所不同&#xff0c;但大同小异。 一.多态的概念 什么是多态&#xff1f; 多态就是不同的对象去做…

Linux如何通过md5校验远程传输的内容的完整性(随手记)

对需要校验的文件生成md5值&#xff0c;并保存 find /etc/ -type f | xargs md5sum > etc.md5校验 md5sum --check etc.md5Linux 中的 md5sum 命令 md5sum 是一个在 Linux 和 Unix 系统中广泛使用的命令行工具&#xff0c;用于计算和检查文件的 MD5&#xff08;Message D…

cudnn是什么

NVIDIA cuDNN&#xff08;CUDA Deep Neural Network&#xff09;是用于深度神经网络的GPU加速库。 它强调性能、易用性和低内存开销。 NVIDIA cuDNN可以集成到更高级别的机器学习框架中&#xff0c;如加州大学伯克利分校的流行caffe软件。简单的&#xff0c;插入式设计可以让…

bash: nvidia-smi: command not found

服务器突然输入&#xff1a; nvidia-smi 出现&#xff1a; bash: nvidia-smi: command not found 确认nvidia-smi的安装路径&#xff0c;通常其位于/usr/bin/目录下&#xff0c;用如下的命令来检查&#xff1a; ls /usr/bin/nvidia-smi如果文件不存在&#xff0c;则 cd /…

简易CAD程序:Qt多文档程序的一种实现

注&#xff1a;文中所列代码质量不高&#xff0c;但不影响演示我的思路 实现思路说明 实现DemoApplication 相当于MFC中CWinAppEx的派生类&#xff0c;暂时没加什么功能。 DemoApplication.h #pragma once#include <QtWidgets/QApplication>//相当于MFC中CWinAppEx的派生…

以太坊(3)——智能合约

智能合约 首先明确一下几个说法&#xff08;说法不严谨&#xff0c;为了介绍清晰才说的&#xff09;&#xff1a; 全节点矿工 节点账户 智能合约是基于Solidity语言编写的 学习Solidity语言可以到WFT学院官网&#xff08;Hello from WTF Academy | WTF Academy&#xff09;…

以x为界,分隔链表为两个分区,各分区内元素相对位置不变

题目描述&#xff1a; 题目思路&#xff1a; 1.设置两个头指针表示两个分区&#xff0c;并对每个分区设置相对于的遍历指针&#xff0c;指向分区链表链尾 2.设置原链表的遍历指针&#xff0c;判断指针所指元素是否小于目标值x&#xff0c;小于的话将结点添加到第一个分区末尾…

C# 中combobox 控件初始化

怎么获取绑定数据的combobox的选中值及选中text 1、绑定combobox的代码如下&#xff1a; DataTable LDT_CodeType Models.MoCodefile.GetCodeType(); if (LDT_CodeType ! null) { cboxCtype.DataSource LDT_CodeType; cboxCtype.DisplayMember codetypename; cboxCtype.Val…

搭建电商电子商务平台有哪些好用的电商API数据采集接口?

电商API接口主要用于帮助开发者将电商功能集成到自己的应用程序中&#xff0c;实现诸如商品检索、商品价格数据获取、订单处理、支付、物流跟踪等功能。以下是一些常用的电商API接口提供商&#xff1a; 主流电商平台API&#xff1a; 淘宝开放平台&#xff1a;提供淘宝、天猫、…

探索Ollama——入门:如何在本地环境中搭建和自定义大型语言模型

探索Ollama——入门&#xff1a;如何在本地环境中搭建和自定义大型语言模型 介绍Ollama 在当今快速发展的人工智能时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经成为技术前沿的热点话题。Ollama&#xff0c;作为一个开创性的工具&#xff0c;使得开发者能够…