【Hive】笔试题 02 (列转行)

题目背景是分析学生课程成绩,相关数据如下:

1、说明

use myhive;
CREATE TABLE `course` (
  `id` int,
  `sid` int ,
  `course` string,
  `score` int 
) ;
// 插入数据
// 字段解释:id, 学号, 课程, 成绩
INSERT INTO `course` VALUES (1, 1, 'yuwen', 43);
INSERT INTO `course` VALUES (2, 1, 'shuxue', 55);
INSERT INTO `course` VALUES (3, 2, 'yuwen', 77);
INSERT INTO `course` VALUES (4, 2, 'shuxue', 88);
INSERT INTO `course` VALUES (5, 3, 'yuwen', 98);
INSERT INTO `course` VALUES (6, 3, 'shuxue', 65);

在这里插入图片描述

2、需求

求:所有数学课程成绩 大于 语文课程成绩的学生的学号

1、使用case…when…将不同的课程名称转换成不同的列

create view tmp_course_view as
select sid, case course when "shuxue" then score else 0 end  as shuxue,  
case course when "yuwen" then score else 0 end  as yuwen from course;  

select * from tmp_course_view;

在这里插入图片描述

2、以sid分组合并取各成绩最大值

create view tmp_course_view1 as
select aa.sid, max(aa.shuxue) as shuxue, max(aa.yuwen) as yuwen from tmp_course_view aa group by sid;  

select * from tmp_course_view1;

在这里插入图片描述

3、比较结果

select * from tmp_course_view1 where shuxue > yuwen;

在这里插入图片描述

4、另外几种思路

可以用自连接来实现,确实更快速。

select c.sid from course c 
join course d 
on c.sid = d.sid 
and c.course ='shuxue' 
and d.course='yuwen' 
where c.score > d.score;
select sid
from (
select sid,
sum(case course when "shuxue" then score else 0 end) as math,
sum(case course when "yuwen" then score else 0 end) as chinese
from course group by sid
) as t1
where t1.math>t1.chinese;
select
sid
from course
group by sid
having sum(case when course='yuwen' then score
when course='shuxue' then 0-score
end) < 0;

结果都是:

+------+--+
| sid  |
+------+--+
| 1    |
| 2    |
+------+--+
Hadoop和Hive是大数据处理领域中经常使用的工具和框架。 Hadoop是一个开源的分布式计算框架,旨在解决处理大规模数据的问题。它通过将大型数据集分布到多个计算机节点上,并利用集群中的多个计算资源进行并行计算和存储,从而实现高效地处理大数据。Hadoop包括Hadoop分布式文件系统(HDFS)和Hadoop资源调度器(YARN),它们共同构成了Hadoop的核心组件。HDFS负责将数据分布式存储到集群中的各个节点上,而YARN则负责管理集群中的资源和任务调度。Hadoop还提供了一个分布式计算编程模型MapReduce,用于编写并行计算任务。通过使用Hadoop,可以实现大规模数据的存储、处理和分析,从而提供有关数据的洞察力。 Hive是建立在Hadoop之上的数据仓库基础架构,它提供了一个类似于SQL的查询语言——HiveQL,用于将结构化数据映射到Hadoop分布式文件系统上,并提供高级查询和分析能力。Hive将用户提交的HiveQL查询转换为MapReduce任务,并在Hadoop集群上执行。Hive的设计目标是提供高效灵活的数据查询和分析解决方案,同时隐藏底层的复杂性。它支持用户自定义函数(UDF)、数据压缩和数据分区等功能,以及与其他工具(如Pig、Sqoop和Flume)的集成。通过使用Hive,用户可以方便地使用SQL语言进行数据的查询、过滤、转换和分析,而无需深入了解Hadoop的底层技术。 总结来说,Hadoop和Hive是大数据处理领域中非常重要的工具和框架。Hadoop提供了一个分布式计算和存储的平台,可用于处理大规模数据,而Hive则建立在Hadoop之上,提供了更高级的查询和分析能力,使用户可以通过类似SQL的语言对大数据进行查询和分析。这些工具的使用可以帮助用户更高效、方便地处理和分析大规模数据,并挖掘出有价值的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值