【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

1. 牛客大厂笔试真题SQLW6:统计所有课程参加培训人次

1.1 题目:

描述

某公司员工培训信息数据如下:

员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程),如下所示:

注:该公司共开设了三门课程,员工可自愿原则性培训0-3项,每项课程每人可培训1次。

问题:请统计该公司所有课程参加培训人次?

示例数据结果如下:

解释:course1课程共有员工1、3、4、7共4名员工培训;

course2课程共有员工1、2、4、7共4名员工培训;

course3课程共有员工3、4、5共3名员工培训;

示例1

输入:drop table if exists  `staff_tb` ; 
CREATE TABLE `staff_tb` (
`staff_id` int(11) NOT NULL,
`staff_name` varchar(16) NOT NULL,
`staff_gender` char(8) NOT NULL,
`post` varchar(11) NOT NULL,
`department` varchar(16) NOT NULL,
PRIMARY KEY (`staff_id`));
INSERT INTO staff_tb VALUES(1,'Angus','male','Financial','dep1'); 
INSERT INTO staff_tb VALUES(2,'Cathy','female','Director','dep1'); 
INSERT INTO staff_tb VALUES(3,'Aldis','female','Director','dep2'); 
INSERT INTO staff_tb VALUES(4,'Lawson','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(5,'Carl','male','Engineer','dep2'); 
INSERT INTO staff_tb VALUES(6,'Ben','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(7,'Rose','female','Financial','dep2'); drop table if exists  `cultivate_tb` ;   
CREATE TABLE `cultivate_tb` (
`info_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`course` varchar(32) NULL,
PRIMARY KEY (`info_id`));
INSERT INTO cultivate_tb VALUES(101,1,'course1,course2');
INSERT INTO cultivate_tb VALUES(102,2,'course2');
INSERT INTO cultivate_tb VALUES(103,3,'course1,course3');
INSERT INTO cultivate_tb VALUES(104,4,'course1,course2,course3');
INSERT INTO cultivate_tb VALUES(105,5,'course3');
INSERT INTO cultivate_tb VALUES(106,6,NULL);
INSERT INTO cultivate_tb VALUES(107,7,'course1,course2');
复制输出:staff_nums
11

1.2 思路:

注意到字符串长度即可。

1.3 题解 :

with tep1 as (-- 抓住本质,直接判断字符串长度就行select case length(course) when 7 then 1when 15 then 2else 3end cntfrom cultivate_tbwhere course is not null
)
select sum(cnt) staff_nums
from tep1

2. 牛客大厂笔试真题SQLW7:查询培训指定课程的员工信息

2.1 题目:

描述

某公司员工信息数据及员工培训信息数据如下:

员工信息表staff_tb(staff_id-员工id,staff_name-员工姓名,staff_gender-员工性别,post-员工岗位类别,department-员工所在部门),如下所示:

员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程),如下所示:

注:该公司共开设了三门课程,员工可自愿原则性培训0-3项;

问题:请查询培训课程course3的员工信息?

注:只要培训的课程中包含course3课程就计入结果

要求输出:员工id、姓名,按照员工id升序排序;
示例数据结果如下:

解释:有员工3、4、5培训了course3课程,故结果如上

示例1

输入:drop table if exists  `staff_tb` ; 
CREATE TABLE `staff_tb` (
`staff_id` int(11) NOT NULL,
`staff_name` varchar(16) NOT NULL,
`staff_gender` char(8) NOT NULL,
`post` varchar(11) NOT NULL,
`department` varchar(16) NOT NULL,
PRIMARY KEY (`staff_id`));
INSERT INTO staff_tb VALUES(1,'Angus','male','Financial','dep1'); 
INSERT INTO staff_tb VALUES(2,'Cathy','female','Director','dep1'); 
INSERT INTO staff_tb VALUES(3,'Aldis','female','Director','dep2'); 
INSERT INTO staff_tb VALUES(4,'Lawson','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(5,'Carl','male','Engineer','dep2'); 
INSERT INTO staff_tb VALUES(6,'Ben','male','Engineer','dep1'); 
INSERT INTO staff_tb VALUES(7,'Rose','female','Financial','dep2'); drop table if exists  `cultivate_tb` ;   
CREATE TABLE `cultivate_tb` (
`info_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`course` varchar(32) NULL,
PRIMARY KEY (`info_id`));
INSERT INTO cultivate_tb VALUES(101,1,'course1,course2');
INSERT INTO cultivate_tb VALUES(102,2,'course2');
INSERT INTO cultivate_tb VALUES(103,3,'course1,course3');
INSERT INTO cultivate_tb VALUES(104,4,'course1,course2,course3');
INSERT INTO cultivate_tb VALUES(105,5,'course3');
INSERT INTO cultivate_tb VALUES(106,6,NULL);
INSERT INTO cultivate_tb VALUES(107,7,'course1,course2');
复制输出:staff_id|staff_name
3|Aldis
4|Lawson
5|Carl

2.2 思路:

如果course字段的值存在3 的话,就替换掉3.然后与原来记录比较。发生变化的就是存在3 的记录。

2.3 题解:

withtep1 as (-- 如果course字段存在3,则将3替换为其数字selectstaff_id,replace (course, '3', '0') replace_coufromcultivate_tbwherecourse is not null),tep2 as (-- 自连接,如果id相同的记录的course却不相同,则即含有3selectt1.staff_idfromtep1 t1join cultivate_tb t2 on t1.staff_id = t2.staff_idand replace_cou <> course)
-- 然后再表内连接即可
select t1.staff_id, staff_name
from tep2 t1 
join staff_tb t2
on t1.staff_id = t2.staff_id

3. 牛客大厂笔试真题SQLW8:推荐内容准确的用户平均评分

3.1 题目:

描述

某产品2022年2月8日系统推荐内容给部分用户的数据,以及用户信息和对推荐内容的评分交叉表部分数据如下:

推荐内容表recommend_tb(rec_id-推荐信息id,rec_info_l-推荐信息标签,rec_use-推荐目标用户id,rec_time-推荐时间),如下所示:

用户信息及评分交叉表user_action_tb(user_id-用户id,hobby_l-用户喜好标签,score-综合评分),如下所示:

注:该表score为对所有推荐给该用户的内容的综合评分,在计算用户平均评分切勿将推荐次数作为分母

问题:请统计推荐内容准确的用户平均评分?(结果保留3位小数)
注:(1)准确定义:推荐的内容标签与用户喜好标签一致;如推荐多次给同一用户,有一次及以上准确就归为准确。
示例数据结果如下:

解释:一共推荐8条内容,其中推荐给101、103、105、106四位用户的内容准确,

四位用户的评分分别是88、78、90、82,故平均评分=(88+78+90+82)/4=84.500

示例1

输入:drop table if exists  `recommend_tb` ; 
CREATE TABLE `recommend_tb` (
`rec_id` int(11) NOT NULL,
`rec_info_l` varchar(8) NOT NULL,
`rec_user` int(11) NOT NULL,
`rec_time` datetime NOT NULL,
PRIMARY KEY (`rec_id`));
INSERT INTO recommend_tb VALUES(1,'健身',101,'2022-02-08 07:23:15');
INSERT INTO recommend_tb VALUES(2,'美妆',102,'2022-02-08 07:24:15');
INSERT INTO recommend_tb VALUES(3,'体育',103,'2022-02-08 07:25:15');
INSERT INTO recommend_tb VALUES(4,'美妆',103,'2022-02-08 07:26:15');
INSERT INTO recommend_tb VALUES(5,'政要',104,'2022-02-08 07:27:15');
INSERT INTO recommend_tb VALUES(6,'体育',104,'2022-02-08 07:28:15');
INSERT INTO recommend_tb VALUES(7,'体育',105,'2022-02-08 07:29:15');
INSERT INTO recommend_tb VALUES(8,'影视',106,'2022-02-08 07:30:15');drop table if exists  `user_action_tb` ;   
CREATE TABLE `user_action_tb` (
`user_id` int(11) NOT NULL,
`hobby_l` varchar(8) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`user_id`));
INSERT INTO user_action_tb VALUES(101,'健身',88);
INSERT INTO user_action_tb VALUES(102,'影视',81);
INSERT INTO user_action_tb VALUES(103,'美妆',78);
INSERT INTO user_action_tb VALUES(104,'健身',68);
INSERT INTO user_action_tb VALUES(105,'体育',90);
INSERT INTO user_action_tb VALUES(106,'影视',82);
复制输出:84.500

3.2 思路:

注意到需要distinct这种情况。

3.3 题解:

with tep1 as (-- 啥啊,咋还出现了一样的记录,非要distinct去重一下。select distinct scorefrom recommend_tb t1join user_action_tb t2on t1.rec_info_l = t2.hobby_landt1.rec_user = t2.user_id
)select round(avg(score), 3)
from tep1

4. 附赠力扣hard题601:体育馆的人流量

4.1 题目:

表:Stadium

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| visit_date    | date    |
| people        | int     |
+---------------+---------+
visit_date 是该表中具有唯一值的列。
每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)
每天只有一行记录,日期随着 id 的增加而增加

编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。

返回按 visit_date 升序排列 的结果表。

查询结果格式如下所示。

示例 1:

输入:
Stadium 表:
+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 1    | 2017-01-01 | 10        |
| 2    | 2017-01-02 | 109       |
| 3    | 2017-01-03 | 150       |
| 4    | 2017-01-04 | 99        |
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
输出:
+------+------------+-----------+
| id   | visit_date | people    |
+------+------------+-----------+
| 5    | 2017-01-05 | 145       |
| 6    | 2017-01-06 | 1455      |
| 7    | 2017-01-07 | 199       |
| 8    | 2017-01-09 | 188       |
+------+------------+-----------+
解释:
id 为 5、6、7、8 的四行 id 连续,并且每行都有 >= 100 的人数记录。
请注意,即使第 7 行和第 8 行的 visit_date 不是连续的,输出也应当包含第 8 行,因为我们只需要考虑 id 连续的记录。
不输出 id 为 2 和 3 的行,因为至少需要三条 id 连续的记录。

4.2 思路:

公式:遇到连续几行的问题 => 直接使用自连接+between and + group by + having => 直接梭哈。

4.3 题解:

with tep1 as (select t1.id id1, t1.id+1 id2, t1.id+2 id3from Stadium t1join Stadium t2on (t2.id - t1.id) between 0 and 2and t2.people >= 100group by t1.idhaving count(*) = 3
), tep2 as (select id1 idfrom tep1unionselect id2 idfrom tep1unionselect id3 idfrom tep1
)
select t1.id, visit_date, people
from tep2 t1
join Stadium t2
on t1.id = t2.id
order by visit_date 

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

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

相关文章

【大数据技术基础 | 实验五】ZooKeeper实验:部署ZooKeeper

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验步骤&#xff08;一&#xff09;安装JDK&#xff08;二&#xff09;修改ZooKeeper配置文件&#xff08;三&#xff09;启动ZooKeeper集群 六、实验结果七、实验心得 一、实验目的 掌握ZooKeeper集群安装部署…

基于Netty构建WebSocket服务并实现项目群组聊天和实时消息通知推送

文章目录 前言需求分析技术预研Web端方案服务端技术 技术方案设计思路功能实现添加依赖自定义NettyServer自定义webSocketHandler使用NettyServer向在线用户发送消息 需要完善的地方 前言 我们的项目有个基于项目的在线文档编制模块&#xff0c;可以邀请多人项目组成员在线协同…

python爬虫-爬取蛋白晶体和分子结构

文章目录 前言一、环境准备二、爬取PDB蛋白结构1.下载指定数量的随机PDB2.下载指定靶标的PDB二、从ZINC爬取小分子mol2结构1.下载指定数量的随机分子2.下载指定分子三、从ChEMBL爬取小分子信息1.下载指定ID的SMILES(测试不成功,网站变成readonly了)四、总结爬虫1.查看对应的…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X&#xff0c;CPU是8845HS&#xff0c;核显是780M&#xff0c;正好macOS 15也出了正式版&#xff0c;试试兼容性&#xff0c;安装过程和之前差不多&#xff0c;这次我从外网获得了8核和16核openCore&#xff0c;分享一下。 提前发一下ISO镜像地址和open…

Flink Rest API

REST API | Apache Flink Flink官网API 通过curl 或者Rest API工具测试web UI对应的接口返回信息 Flink 提交yarn任务 ./bin/flink run -t yarn-per-job historyServer ../bin/historyserver.sh start

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式&#xff1a; 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

安装Maven配置以及构建Maven项目(2023idea)

一、下载Maven绿色软件 地址&#xff1a;http://maven.apache.org/download.cgi 尽量不要选择最高版本的安装&#xff0c;高版本意味着高风险的不兼容问题&#xff0c;选择低版本后续问题就少。你也可以选择尝试。 压缩后&#xff1a; 打开后&#xff1a; 在该目录下新建mvn-…

SQLite 3.47.0 发布,大量新功能来袭

SQLite 开发团队于 2024 年 10 月 21 日发布了 SQLite 3.47.0 版本&#xff0c;我们来了解一下新版本的改进功能。 触发器增强 SQLite 3.47.0 版本开始&#xff0c;触发器函数 RAISE() 的 error-message 参数可以支持任意 SQL 表达式。在此之前&#xff0c;该参数只能是字符串…

SQL注入之sqlilabs靶场21-30题

重点插入&#xff1a;html表 第二十一题 分析过程&#xff1a;&#xff08;没有正确的账号密码是否能拿到Cookie&#xff1f;最后注释好像只能使用#&#xff0c;--好像无法注释&#xff09; 查看源码 这里输入账号密码处被过滤了 但Cookie被base64编码了 可以从Cookie入手 …

【Flutter】页面布局:弹性布局(Flex)

在 Flutter 开发中&#xff0c;布局是非常重要的部分。布局系统允许开发者控制和管理界面上的组件如何排列和展示。弹性布局&#xff08;Flex&#xff09;是其中一个非常强大且常用的布局组件&#xff0c;它能够在水平方向或垂直方向上灵活调整子组件的空间分配比例。Row 和 Co…

vue2结合echarts实现数据排名列表——前端柱状进度条排行榜

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;工作多年做过各类项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 数据排名列表——图表开发&#xff0c;动态柱状图表&#xff0c;排名图 UI 直接搜到类似在线代码&#xff08;数据列表…

javascript实现aes算法(支持微信小程序)

概述&#xff1a; 本代码是本人从c代码上转换成的javascript代码&#xff0c;并测试验证通过的。代码比较长1000多行&#xff0c;考虑放其他地方要么要会员要么容易关闭&#xff0c;不容易被需要的获取到&#xff0c;故直接贴在本文档下面的章节&#xff0c;功能代码。 测试平…

RK3568 android11 usb接口TP与电磁笔触点上报优先级问题

一&#xff0c;问题描述 双USB接口&#xff0c;电容触摸跟电磁手写笔触摸会产生误触现象&#xff0c;所以需要在底层实现电磁笔优先级。 电磁屏优先&#xff08;指当笔和手都放屏上&#xff0c;手不发信息&#xff09;&#xff0c;因为都是USB接口使用&#xff0c;电容触摸跟电…

ubuntu22.04安装qemu-9.1并在i.MX6上运行linux kernel 6.11

1. qemu-stable-9.1源码编译安装 1.1. 下载qemu源码的stable-9.1分支 仓库地址 mkdir qemu_9.1 cd qemu_9.1 git clone https://gitlab.com/qemu-project/qemu.git --branchstable-9.1 --depth5 git submodule update --init --recursive cd qemu1.2. 安装依赖 参考文档 s…

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 &#xff08;1&#xff09;corePoolSize 与 maximumPoolSize &#xff08;2&#xff09;keepAliveTime 与 unit &#xff08;3&#xff09;workQueue&am…

Redis集群分片存储最佳实践,手把手搭建Redis集群

目录 一、Redis集群介绍1、设计目标2、为什么需要分片存储 二、官网集群方案三、搭建集群1、准备6个独立的Redis服务2、通过redis-cli工具创建集群3、检验集群4、集群重新分片5、故障转移测试6、集群扩容7、集群节点删除 四、集群关心的问题五、集群功能限制 一、Redis集群介绍…

第11天理解指针

目录 数组指针 指针数组 字符指针数组 二维字符数组 const 修饰变量为常量 指针常量 常量指针 typedef 重命名数据类型 关于typedef的一般理解 具体示例分析 复杂示例分析 总结回顾--指针的奥秘&#xff1a;深入理解内存地址与数据存储 一、指针的本质 二、地址类…

使用Python实现智能火山活动监测模型

一、引言 火山爆发是自然界最具破坏力的事件之一,其对人类的影响可以从气候、空气质量到生命安全等多个方面产生深远影响。传统的火山监测依赖地质学家在现场采集数据,而现代科技的发展让远程监测成为可能。通过深度学习和数据分析技术,我们可以使用Python构建一个智能火山…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…

C++[CSP-J 2023] 公路讲解

题目&#xff1a;2023CSP-J公路 思路&#xff1a;贪心 我们可以在草稿纸上列一列&#xff0c;滤清思路&#xff0c;这道题没什么难度的&#xff01; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,d,a[100005],v[100005],s[10005],id1; …