HiveSQL 练习题及答案

HiveSQL 练习题及答案

以下是一些 HiveSQL 练习题目,包括创建表、插入数据、查询数据等操作。这些题目将帮助您巩固 HiveSQL 的知识。

题目1:

假设您有以下 students 表:

idnameagegenderclass_id
1Alice20F1
2Bob22M1
3Carol19F2
4Dave21M2
5Eve20F1

和以下 classes 表:

idname
1Math
2Computer

请完成以下练习:

  1. 使用 HiveSQL 创建 students 表和 classes 表。
  2. 将数据插入 students 表和 classes 表。
  3. 查询所有男性学生的信息。
  4. 查询所有 20 岁学生的姓名和班级名称。

答案

1. 创建表

创建 students
CREATE TABLE students (
  id INT,
  name STRING,
  age INT,
  gender STRING,
  class_id INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

创建 classes

CREATE TABLE classes (
  id INT,
  name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

2. 插入数据

插入数据到 students

INSERT INTO students VALUES
(1, 'Alice', 20, 'F', 1),
(2, 'Bob', 22, 'M', 1),
(3, 'Carol', 19, 'F', 2),
(4, 'Dave', 21, 'M', 2),
(5, 'Eve', 20, 'F', 1);

插入数据到 classes

INSERT INTO classes VALUES
(1, 'Math'),
(2, 'Computer');

3. 查询所有男性学生的信息

SELECT * FROM students WHERE gender = 'M';

4. 查询所有 20 岁学生的姓名和班级名称

SELECT s.name, c.name
FROM students s
JOIN classes c ON s.class_id = c.id
WHERE s.age = 20;

题目2:

假设您有以下 sales 表,存储了不同地区和季度的销售额数据:

regionquartersales
AQ1100
AQ2150
AQ3200
BQ1120
BQ2180
BQ3210

请完成以下练习:

  1. 使用 HiveSQL 将 sales 表按地区进行行转列,使得每个地区的所有季度销售额都显示在一行中。

  2. 假设现在有一个表 sales_pivot,其结构如下:

    regionQ1Q2Q3
    A100150200
    B120180210

    请使用 HiveSQL 将 sales_pivot 表进行列转行,还原为原始的 sales 表结构。

  3. 计算每个地区的总销售额。

答案

1. 行转列

SELECT region,
       SUM(CASE WHEN quarter = 'Q1' THEN sales ELSE 0 END) AS Q1,
       SUM(CASE WHEN quarter = 'Q2' THEN sales ELSE 0 END) AS Q2,
       SUM(CASE WHEN quarter = 'Q3' THEN sales ELSE 0 END) AS Q3
FROM sales
GROUP BY region;

2. 列转行

SELECT region, 'Q1' AS quarter, Q1 AS sales FROM sales_pivot
UNION ALL
SELECT region, 'Q2' AS quarter, Q2 AS sales FROM sales_pivot
UNION ALL
SELECT region, 'Q3' AS quarter, Q3 AS sales FROM sales_pivot;

3. 计算每个地区的总销售额

SELECT region, SUM(sales) AS total_sales
FROM sales
GROUP BY region;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泽泽野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值