欢聚笔试题求助帖

事情是这样的,这段时间一直在求职投简历,期望在暑假之前接到一份大数据开发的实习工作。投了很多公司,然后就收到了欢聚的笔试邀约,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;通过信…

K8s-yaml文件

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

汽车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主从复制 …

adb 汇总

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

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

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

简易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;小于的话将结点添加到第一个分区末尾…

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

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

ngnix 入门 二,docker启动nginx, 安装ssl 证书,使用配置文件,映射后端服务 ,提供给前端项目访问

搭建生产环境真不是人做的事&#xff0c;特别是对于一知半解的人。仅以此文献给各位技术人 说一下背景&#xff1a;项目前后端分离&#xff0c;前端 vue3 、小程序端 &#xff0c;后端 go 提供服务。 微信小程序需要使用 https 请求。 这就必须让我们想到nginx 了 想要达到的…

MySQL学习之DQL语句(数据查询语言)

准备SQL CREATE TABLE student ( id int, -- 编号 name varchar(20), -- 姓名 age int, -- 年龄 sex varchar(5), -- 性别 address varchar(100), -- 地址 math int, -- 数学 english int -- 英语 );INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,…

【UE5.1 角色练习】02-添加慢走、快速跑、蹲伏功能

目录 前言 步骤 一、慢走 二、快速跑 三、蹲伏 前言 在上一篇文章基础上&#xff08;【UE5.1 角色练习】01-使用小白人蓝图控制商城角色移动&#xff09;继续实现角色的慢走、快速跑以及蹲伏功能 步骤 一、慢走 1. 打开项目设置&#xff0c;添加一个操作映射&#x…

思维导图-VPN

浏览器集成了受信任的机构的证书

linux---信号的捕捉和处理

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、信号 可以简单理解为信号是一个进程给另一个信号发消息&#xff0c;进程收到对应的信号就执行对应的方法&#xff0c;linux信号可以分为实时信号和非实时信号 1-31为非实时信号&#xff0c;34-64为…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源&#xff0c;提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系&#xff0c;持续开展合作征…

利用神经网络学习语言(一)——自然语言处理的基本要素

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch10_rnn/tokenizer.ipynb 本系列文章将深入探讨一种应用广泛的神经…

syncthing文件夹同步与版本管理

1 前言 syncthing可以用来同步文件夹里的所有文件&#xff0c;并且有不错的版本管理&#xff0c;基本每次更改文件&#xff0c;20-40秒就被扫描到了&#xff0c;非常丝滑&#xff1b;这次以此来同步obsidian的插件和文件&#xff0c;达到多端同步&#xff1b; 我家里有一台台…

Android HAL到Framework

一、为什么需要Framwork? Framework实际上是⼀个应⽤程序的框架&#xff0c;提供了很多服务&#xff1a; 1、丰富⽽⼜可扩展的视图&#xff08;Views&#xff09;&#xff0c; 可以⽤来构建应⽤程序&#xff0c;它包括列表&#xff08;lists&#xff09;&#xff0c;⽹格&am…