HiveSQL 练习题及答案

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

请完成以下练习:

  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 表,存储了不同地区和季度的销售额数据:

region quarter sales
A Q1 100
A Q2 150
A Q3 200
B Q1 120
B Q2 180
B Q3 210

请完成以下练习:

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

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

    region Q1 Q2 Q3
    A 100 150 200
    B 120 180 210

    请使用 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;

猜你喜欢

转载自blog.csdn.net/weixin_47884711/article/details/129975280