hiveSQL面试题目
时间: 2025-02-21 22:25:13 浏览: 88
### Hive SQL 面试常见问题及答案
#### 计算工作时长
对于给定的`abc`列中的记录,为了计算从申请到通过所占用的工作时长,可以采用以下方法。首先,过滤并提取出所有的“申请”和“通过”的时间戳;接着按照ID分组,并找到每一对对应的最早申请时间和最晚通过时间;最后计算这两个时间之间的差值作为工作时长[^1]。
```sql
SELECT id,
MIN(CASE WHEN status='申请' THEN timestamp END) AS apply_time,
MAX(CASE WHEN status='通过' THEN timestamp END) AS pass_time,
TIMESTAMPDIFF(HOUR, MIN(CASE WHEN status='申请' THEN timestamp END),
MAX(CASE WHEN status='通过' THEN timestamp END)) / 24 AS work_days
FROM t14
GROUP BY id;
```
此SQL语句假设`t14`表中有三个字段:id(客户编号)、status(状态,“申请”或“通过”)以及timestamp(时间戳)。上述查询会给出每个客户的申请与通过之间相隔的日数,这里使用了`TIMESTAMPDIFF()`函数来获取小时差异再除以24转换成天数表示的工作日长度。
#### 多值聚合显示
当涉及到将多条关联的数据汇总为单行输出的情况时——比如把同一个用户的多次购买行为压缩成一行展示其所有购买的商品列表,则可以通过字符串连接的方式实现这一目标。具体做法是在子查询里按需筛选数据之后利用内置的集合操作符或者特定于数据库系统的聚集功能完成最终的结果集构建[^2]。
```sql
SELECT user_id,
GROUP_CONCAT(product_id ORDER BY product_id SEPARATOR ',') as purchased_products
FROM orders
GROUP BY user_id;
```
这段代码片段展示了如何在一个名为orders的关系型表格中收集每位顾客曾经买过的不同产品项,并且把这些项目依照一定顺序排列后串联起来形成一个新的属性purchased_products供后续分析处理之用。
#### 数据分组运算
面对需要基于某些条件对原始资料实施分类统计的任务场景下,通常的做法是先依据指定的标准执行初步划分动作,随后针对每一个独立的小群体内部开展进一步深入探讨。例如求解某段时间跨度内的极值变化量就属于此类典型应用案例之一,在这种情况下往往要借助窗口函数或是简单的聚合手段达成目的[^3]。
```sql
WITH grouped_data AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY group_key ORDER BY date_column DESC) rn_max,
ROW_NUMBER() OVER (PARTITION BY group_key ORDER BY date_column ASC) rn_min
FROM your_table
)
SELECT gd.group_key,
MAX(CASE WHEN gd.rn_max=1 THEN gd.date_column END)-MIN(CASE WHEN gd.rn_min=1 THEN gd.date_column END)+1 AS duration
FROM grouped_data gd
WHERE gd.rn_max=1 OR gd.rn_min=1
GROUP BY gd.group_key;
```
以上实例说明了一个较为通用的技术路线图用于解决涉及日期范围计算的问题,其中包含了创建临时视图表辅助定位边界位置的关键步骤,同时也体现了灵活运用标准SQL语法结构解决问题的能力。
阅读全文
相关推荐















