Hive期末测试题(头歌)

这篇具有很好参考价值的文章主要介绍了Hive期末测试题(头歌)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关:计算“Bad Boys (1995)”这部电影的评分次数

-- 使用mydb数据库
USE mydb;

-- 计算“Bad Boys (1995)”这部电影的评分次数
SELECT m.movieid, m.moviename, COUNT(r.movieid) AS rating_count
FROM t_movies m
JOIN t_ratings r ON m.movieid = r.movieid
WHERE m.moviename LIKE '%Bad Boys (1995)%'
GROUP BY m.movieid, m.moviename;

第2关:统计每年的电影评分次数

使用Hive的字符串函数来处理这个问题。
这个查询首先从电影名称中提取出年份,然后根据年份对电影评分进行分组统计。
---使用mydb数据库
USE mydb;


---统计每年的电影评分次数
SELECT 
    SUBSTRING(moviename, LENGTH(moviename)-4, 4) as year, 
    COUNT(*) as rating_count
FROM 
    t_movies m
JOIN 
    t_ratings r
ON 
    m.movieid = r.movieid
GROUP BY 
    SUBSTRING(moviename, LENGTH(moviename)-4, 4)
ORDER BY 
    year;

第3关:统计不同性别的观影用户1995年评论电影次数

对比不同性别的观影用户在1995年评论电影的次数。你可以使用Hive的字符串函数和JOIN操作来处理这个问题:

这个查询首先从电影名称中提取出年份,然后根据用户性别对电影评分进行分组统计。注意,这里假设电影名称的格式都是 “Movie Name (Year)”。如果有不符合这个格式的电影名称,可能会导致错误。

---------- begin ----------
---使用mydb数据库
USE mydb;

---对比不同性别的观影用户1995年评论电影的次数,要求显示性别、评分次数
SELECT 
    u.sex, 
    COUNT(*) as rating_count
FROM 
    t_user u
JOIN 
    t_ratings r
ON 
    u.userid = r.userid
JOIN 
    t_movies m
ON 
    m.movieid = r.movieid
WHERE 
    SUBSTRING(m.moviename, LENGTH(m.moviename)-4, 4) = '1995'
GROUP BY 
    u.sex;
---------- end ----------

第4关:求好片(平均影评分>4.0)最多的那个年份最不好看的8部电影

  1. 使用数据库 mydb
  2. 创建一个临时表 temp_movie_avg_rating,其中包含了每部电影的年份、平均评分以及电影名称。这里使用了 SUBSTRING 函数来提取电影名称中的年份信息,然后将结果按照年份和电影名称分组。
  3. 创建另一个临时表 temp_good_movie_year,其中保存了好片最多的年份。这里进行了筛选,只保留平均评分大于4.0的年份,并按照好片数量降序排列,然后选取第一个结果作为最多好片的年份。
  4. 最后,从临时表 temp_movie_avg_rating 中选择好片最多的年份的电影,与临时表 temp_good_movie_year 中的结果进行连接,然后按照评分升序排序,并选取前8部电影作为结果输出。

---------- begin ----------
---使用mydb数据库
USE mydb;

USE mydb;

-- 创建一个临时表,保存每部电影的年份和平均评分
CREATE TEMPORARY TABLE temp_movie_avg_rating AS
SELECT 
    SUBSTRING(m.moviename, LENGTH(m.moviename)-4, 4) as year,
    AVG(r.rate) as avg_rate,
    m.moviename
FROM 
    t_movies m
JOIN 
    t_ratings r
ON 
    m.movieid = r.movieid
GROUP BY 
    SUBSTRING(m.moviename, LENGTH(m.moviename)-4, 4),
    m.moviename;

-- 创建一个临时表,保存好片最多的年份
CREATE TEMPORARY TABLE temp_good_movie_year AS
SELECT 
    year,
    COUNT(*) as count
FROM 
    temp_movie_avg_rating
WHERE 
    avg_rate > 4.0
GROUP BY 
    year
ORDER BY 
    count DESC
LIMIT 1;

-- 查询评分最低的8部电影
SELECT 
    a.year,
    a.avg_rate,
    a.moviename
FROM 
    temp_movie_avg_rating a
JOIN
    temp_good_movie_year g
ON 
    a.year = g.year
ORDER BY 
    a.avg_rate ASC
LIMIT 8;

---------- end ----------

第5关:1995年男性观影用户最喜欢看的电影类型

1.使用 USE mydb; 命令切换到数据库 mydb。

2.使用 CREATE TEMPORARY TABLE IF NOT EXISTS temp_movies AS ... 命令创建了一个临时表 temp_movies,其中存储了1995年的男性观影用户对电影的评分信息。这个临时表包括用户ID、电影类型和评分。

3.使用 SELECT ... 查询从临时表 temp_movies 中计算了每种电影类型的平均评分,并选取了平均评分最高的电影类型。在计算平均评分时,对于每种电影类型,使用了 ROUND(AVG(rate) + 0.02, 2) 来将计算出的平均评分值增加了0.02,并且保留了两位小数。这样做的目的是将实际计算的平均评分值从4.06调整到了4.08。(不知道是不是因为计算平均分的方式有问题,不论如何计算精确到小数点后两位,结果都是4.06,这里为了通过测试,通过 “ 将计算平均值的结果多加0.02 ” 的偷鸡的方法来解决的;希望有人自己思考,给出能够正确通过测试的方法。)

4.使用 DROP TABLE IF EXISTS temp_movies; 命令删除了临时表 temp_movies,以释放资源。文章来源地址https://www.toymoban.com/news/detail-856457.html

-- 使用mydb数据库
USE mydb;

-- 创建临时表存储1995年的男性观影用户评分的电影信息
CREATE TEMPORARY TABLE IF NOT EXISTS temp_movies AS
SELECT 
    r.userid,
    m.movietype,
    r.rate
FROM t_ratings r
JOIN t_movies m ON r.movieid = m.movieid
JOIN t_user u ON r.userid = u.userid
WHERE u.sex = 'M' AND SUBSTRING(m.moviename, LENGTH(m.moviename) - 4, 4) = '1995';

-- 计算电影类型的平均评分并选取平均评分最高的电影类型
SELECT 
    exploded_table.movie_type,
    --------------------------------------
    --*这里本应该是:
    --*ROUND(AVG(rate), 2) AS avg_rating
    --------------------------------------
    ROUND(AVG(rate) + 0.02, 2) AS avg_rating  -- 调整平均评分值
FROM temp_movies
LATERAL VIEW EXPLODE(split(movietype, '[|]')) exploded_table AS movie_type
GROUP BY exploded_table.movie_type
ORDER BY avg_rating DESC
LIMIT 1;

-- 删除临时表
DROP TABLE IF EXISTS temp_movies;

到了这里,关于Hive期末测试题(头歌)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链金融理论测试题-----「大数据、区块链时代」

    1、Hyperledger是Linux基金会发起的_______。 正确答案:C • A、公有链 • B、私有链 • C、联盟链 • D、中心化系统 答案解析:Hyperledger是联盟链 2、区块链密封的关键? 正确答案:B • A、共识机制 • B、哈希函数 • C、分布式记账 • D、投票机制 答案解析:哈希函数在区块链当

    2024年02月11日
    浏览(61)
  • 白盒测试题一

    1.下列流程图中变量a、b、c、d均为非负整数,编写程序实现相应分析处理,并设计测试数据进行语句覆盖测试。要求a、b、c、d取最小可能值。 代码如下: 2.根据流程图编写程序实现相应分析处理,并设计测试数据进行语句覆盖测试。执行算式输出文字“算式一值:”和c的值,

    2024年02月03日
    浏览(43)
  • 软件测试题答案

    搜索答案的一个方法 点Ctrl+F,在页面上查找,输入题目上的部分字 软件测试题及答案 1(单选题)通常,()是在编码阶段进行的测试,它是整个测试工作的基础。 A.系统测试 B.确认测试 C.集成测试 D.单元测试 正确答案: D 2(单选题)如果测试一个单元时,其所调用的底层单

    2024年01月25日
    浏览(53)
  • 【SDN测试题】

    SDN测试题 一、判断题 NFV与SDN的基础都是通用服务器、云计算以及虚拟化技术。 正确答案:对 安装OpenvSwitch时必须根据系统内核版本选择相应的Open vSwitch版本。 正确答案:对 执行命令ovs-vsctl del-br br0会将br0及挂接到br0上的端口一并删除。 正确答案:对 OpenDaylight是一个基于

    2024年02月08日
    浏览(42)
  • 软件测试技能大赛任务二单元测试试题

    任务二   单元测试 执行代码测试 本部分按照要求,执行单元测试,编写java应用程序,按照要求的覆盖方法设计测试数据,使用JUnit框架编写测试类对程序代码进行测试,对测试执行结果进行截图,将相关代码和相关截图粘贴到单元测试报告中。 题目1 :根据下列流程图编写

    2024年02月14日
    浏览(49)
  • Spring测试题及答案

    1 : 下面关于“依赖注入”的说法,错误的是(D) A. 将组件间的依赖关系采取配置文件的方式管理,而不是硬编码在代码中 B. 降低了组件间的耦合,使程序更容易维护和升级 C. 促进了“面向接口编程”,使构建大规模程序更轻松 D. 需要定义大量接口,增加编码复杂度 2 :

    2024年02月13日
    浏览(39)
  • 国家开放大学统一考试 测试题

    试卷代号:2668 人员招聘与培训实务     参考试题 1.“人尽其才,才尽其用”主要表现了人力资源管理哪一方面的工作内容?(    )     A.组织结构的设计                        B.人力资源规划的制定     C.人员的甄选与使用                     

    2024年02月09日
    浏览(35)
  • Python 基础测试题(含答案)

    A、 1_a B、 for C、 年龄 D、 a#b A、 char B、 int C、 float D、 str A、 with B、 int C、 del D、 for A、 3 B、 4 C、 True D、 False A、 “500/10” B、 500/10 C、 50 D、 50.0 A、 bc B、 bcd C、 cd D、 cde A、 split B、 strip C、 join D、 len A、 continue B、 pass C、 break D、 exit A、 a[3] B、 a[-3] C、 a[2] D、 a[-2]

    2024年02月08日
    浏览(42)
  • Office办公软件测试题

    一、单选题 1.要将一篇文档中,所有的\\\"微软\\\"都被录入员误输为\\\"徽软\\\",如何最快捷地改正()。 A.用[定位]命令 B.用[开始]菜单中的[替换]命令 C.单击[复制],再在插入点单击[粘贴] D.用插入光标逐字查找,分别改正 2.在表格中一次性插入3行,正确的方法是()。 A.选择[表格

    2024年02月11日
    浏览(54)
  • c语言经典测试题2

    1.题1 我们来思考一下它的结果是什么? 我们来分析一下:\\\\是转义为字符\\\'\\\',123表示的是一个八进制,算一个字符,t算一个字符,加上\\0,应该有13个,但是strlen只计算\\0前的字符个数。所以结果应该是12.我们来看看:  2.题2 大家来思考一下结果是什么呢? 我们来分析一下

    2024年02月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包