HiveSQL 练习题及答案
以下是一些 HiveSQL 练习题目,包括创建表、插入数据、查询数据等操作。这些题目将帮助您巩固 HiveSQL 的知识。
题目1:
假设您有以下 students
表:
id | name | age | gender | class_id |
---|---|---|---|---|
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
表:
id | name |
---|---|
1 | Math |
2 | Computer |
请完成以下练习:
- 使用 HiveSQL 创建
students
表和classes
表。 - 将数据插入
students
表和classes
表。 - 查询所有男性学生的信息。
- 查询所有 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
表,存储了不同地区和季度的销售额数据:
region | quarter | sales |
---|---|---|
A | Q1 | 100 |
A | Q2 | 150 |
A | Q3 | 200 |
B | Q1 | 120 |
B | Q2 | 180 |
B | Q3 | 210 |
请完成以下练习:
-
使用 HiveSQL 将
sales
表按地区进行行转列,使得每个地区的所有季度销售额都显示在一行中。 -
假设现在有一个表
sales_pivot
,其结构如下:region Q1 Q2 Q3 A 100 150 200 B 120 180 210 请使用 HiveSQL 将
sales_pivot
表进行列转行,还原为原始的sales
表结构。 -
计算每个地区的总销售额。
答案
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;