HiveSQL一天一个小技巧:借助于聚合函数与case when进行行转列

0 需求

目标结果表

1 数据准备

创建原始数据表,加载数据

--切换数据库

use db_function;

--建表
create table row2col1(
  
col1 string,
  
col2 string,
  
col3 int
) row format delimited fields terminated by '\t';

--加载数据到表中
load data local inpath '/export/data/r2c1.txt' into table row2col1;

2 实现

SQL实现转换

select
 
col1 as col1,
  max(
case col2 when 'c' then col3 else 0 end) as c,
  max(
case col2 when 'd' then col3 else 0 end) as d,
  max(
case col2 when 'e' then col3 else 0 end) as e
from
 
row2col1
group by
 
col1;

欢迎关注石榴姐公众号"我的SQL呀",关注我不迷路

 

### 解码 SQL 查询语句的方法 #### 使用工具辅助理解复杂查询 对于复杂的 SQL 查询,尤其是涉及嵌套子查询或多表联结的情况,可以借助图形化数据库管理工具(如 DBeaver 或 MySQL Workbench)。这些工具有助于可视化查询结构,使开发者更容易理解各个部分的功能。 #### 手动解析 SQL 语法树 手动解构 SQL 语句也是一种有效的方式。通过逐步拆分查询成分,能够更好地掌握其工作原理: 1. **识别主要关键字** - `SELECT` 表明这是一条检索数据的命令。 - 如果存在 `INSERT`, `UPDATE`, 或者 `DELETE` 则表示对应的操作类型。 2. **分析目标列表达式** - 查看紧跟在 `SELECT` 后面的部分,了解要获取哪些字段或计算结果。 3. **定位FROM子句中的源表** - 明确参查询的基础表格名称及其别名定义方式。 4. **处理WHERE过滤条件** - 当遇到多张表关联时,注意内外连的区别及ON后的匹配规则说明。 6. **评估GROUP BY聚合函数应用** - 若有汇总需求,则需关注分组依据是什么样的属性组合而成。 7. **审查HAVING筛选标准** - 类似于WHERE但是作用对象为已聚合成组的数据集合之上。 8. **最后查看ORDER BY排序指令** - 掌握最终输出记录按照何种顺序排列呈现给用户端。 针对具体例子而言,比如下面这个带有子查询的SQL片段: ```sql SELECT * FROM emp WHERE dept_id IN ( SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部' ); ``` 这段代码首先执行内层查询 `(SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部')` 来找出符合条件部门ID[^1];接着外层查询利用得到的结果集作为IN运算符右侧参数,从而限定只显示那些属于指定部门下的雇员详情。 另一个案例展示了CASE WHEN 结构的应用场景: ```sql SELECT name, CASE WHEN (age > 60) THEN '老同学' WHEN (age > 20) THEN '年轻' ELSE '小同学' END AS age_level FROM student ORDER BY name ASC; ``` 这里运用了分支判断机制来动态分配不同的标签给每位学员,并且整个结果会依照名字字母先后次序展示出来[^2]。 当涉及到UNION操作的时候,需要注意的是它用来合并来自不同查询的选择项,但前提是要保证所有组成部分都具备相等数目且兼容类型的列布局[^3]: ```sql (SELECT col1, col2 FROM tableA) UNION ALL (SELECT colX, colY FROM tableB); ``` 以上就是一些基本技巧帮助理解和解读各种形式的SQL脚本内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值