sql——对于行列转换相关的操作

这篇具有很好参考价值的文章主要介绍了sql——对于行列转换相关的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、lead、lag 函数

二、wm_concat 函数

三、pivot 函数

四、判断函数


        遇到需要进行行列转换的数据处理需求,以 oracle 自带的表作为例子复习一下:

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

一、lead、lag 函数

         需要行列转换的表:

select deptno,count(empno) emp_num from emp group by deptno

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

        先将转化结果贴出来易于理解

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

select emp_num dept1,
     lead(emp_num,1) over(order by e.deptno) dept2,  # 根据 emp_num 得到后1行数据
     lead(emp_num,2) over(order by e.deptno) dept3   # 根据 emp_num 得到后2行数据
     from (select deptno,count(empno) emp_num
           from emp group by deptno) e

        得到: 

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

        可以看出使用位移函数后,在第二列得到的是第二行往后的数据,第三列得到的是第三行开开始的数据,以此类推,第N列第一行就是第一列的第N行了,顺序也一样,此时只需要得到第一行,就是原来的第一列数据了

select dept1 "部门10",dept2 "部门20",dept3 "部门30"
from (select emp_num dept1,
     lead(emp_num,1) over(order by e.deptno) dept2,
     lead(emp_num,2) over(order by e.deptno) dept3
     from (select deptno,count(empno) emp_num
           from emp group by deptno) e)
where rownum=1;    

        rownum是oracle的伪列,会在原表中新增一个新的列,来记录每一行的数据(用来表示序号),只能使用 < 或 <=(除=1以外)

        实际中可能可以使用for循环处理较大量的数据

二、wm_concat 函数

        该函数可以将目标字段的值用逗号连成一行,一般结合 group by 一起使用,查看每个类别的明细,仍使用如下表:

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

select deptno,count(*) 人数,wm_concat(ename) 姓名
from emp 
Group by deptno;

        根据部门分组统计人数,列出每组的 ename (姓名)

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

三、pivot 函数

        格式:select * from 表 pivot(聚合函数 for 分组的列 in (显示分解后的列名1,列名2,…));

select deptno,empno from emp; --员工编号

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

select * 
from (select deptno,empno from emp) --由上表选择
pivot(count(empno) for deptno in    --部门分组重复计数
('10' as 部门10,'20' as 部门20,'30' as 部门30))

        这里的 '10' 为值,后接 as+列名,即所有值为'10'的统计完记为"部门10 "

四、判断函数

select deptno,empno from emp; --员工编号

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

(一)判断,得到要统计的员工号,不满足的为空

select case when deptno=10 then empno end as "10",
case when deptno=20 then empno end as "20",
case when deptno=30 then empno end as "30"
from emp;

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库

(二)统计,count+列名会统计过滤空值,统计非空值

select count(case when deptno=10 then empno end )as "10",
count(case when deptno=20 then empno end )as "20",
count(case when deptno=30 then empno end )as "30"
from emp;

sql——对于行列转换相关的操作,数据库,工作日记,sql,数据库文章来源地址https://www.toymoban.com/news/detail-843450.html

到了这里,关于sql——对于行列转换相关的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://blog.csdn.net/m0_73716246/article/details/136913432

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库(database)相关操作

    修改my.ini配置文件,可修改MySQL默认的字符集. 修改[mysql]选项组下的default_character_set的值可以同时改变character_set_client, character_set_connection, character_set_database的值 修改[mysql]选项组下的character_set_server的值可同时改变character_set_database, character_set_server的值 在MySQL命令行通过以下命令

    2024年02月05日
    浏览(12)
  • Spark【Spark SQL(二)RDD转换DataFrame、Spark SQL读写数据库 】

    Saprk 提供了两种方法来实现从 RDD 转换得到 DataFrame: 利用反射机制推断 RDD 模式 使用编程方式定义 RDD 模式 下面使用到的数据 people.txt :         在利用反射机制推断 RDD 模式的过程时,需要先定义一个 case 类,因为只有 case 类才能被 Spark 隐式地转换为DataFrame对象。 注意

    2024年02月09日
    浏览(7)
  • 数据库应用:MySQL数据库SQL高级语句与操作

    目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验  1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表  三、总结 克隆表:将数据表的数据记录生成到新的表中。 (1)克隆表 ① 先创建再导入 ② 创建

    2024年02月13日
    浏览(14)
  • SQL 数据库基本操作

    打开 SSMS(Microsoft SQL Server Management Studio),“对象资源管理器” 窗口列表中依次双击 “UERE-20220228OY” → ”数据库“ → ”系统数据库“ (”UERE-20220228OY“ 是系统连接的服务器名称,不同的计算机中名称不尽相同),在展开的列表中可看到 4个已经存在的数据库,分别为

    2024年02月08日
    浏览(15)
  • SQL之新人专属——数据库操作

    目录 1,什么是数据库? 2,什么是SQL? 3,SQL有什么用? 4,SQL类型 5,SQL之DDL,DML,DQL,DCL         数据库,顾名思义——一个存放数据的仓库。         正是因为有了数据库后,我们可以直接查找数据。例如你每天使用余额宝查看自己的账户收益,就是从数据库读取数据

    2023年04月13日
    浏览(5)
  • Python操作sql,备份数据库

    3、使用shell执行python脚本

    2024年02月12日
    浏览(11)
  • 用SQL语句操作Oracle数据库——数据更新

    数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作,SQL语言中有3种相应的语句与之对应。接下来让我们逐一详细地了解一下。 本文我们依然使用以下三个表来进行数据更新操作:

    2024年01月19日
    浏览(25)
  • MySQL 课后习题解析与笔记——学生选课数据库相关操作

    这篇文章记录一下帮助粉丝朋友一起学习解决的 MySQL 课后习题,内容很基础,都是基础的数据库语句和操作,内容是关于学生选课数据库的一些操作。这里我用 MySQL 和 Navicat 完成这些题目。 题目如下: 现有学生选课数据库:Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno

    2024年02月08日
    浏览(12)
  • sql serve数据库中表的操作

    🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:: 在上一篇的最后,牛牛介绍了怎么创建表,本篇牛牛介绍如何管理表的结构,以及管理表中的数据(添加,修改和删除). 本片中用到的\\\"数据库\\\"和\\\"表\\\"是上一篇文章创建的

    2024年02月19日
    浏览(6)
  • SQL数据库的查询操作大全(select)

    1、数据库的连接、创建 2、对字段的操作:(alter table) 3、对数据的操作(插入、修改、删除) 4、数据查询(select) 5、多表查询(join on) 6、约束操作 四、数据库查询大全(select) 1、select 字段名 from 表; 2、In查询:用于 过滤 你所需要查询的内容                

    2023年04月08日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包