精华内容
下载资源
问答
  • 主要给大家介绍了关于SQL基础教程之行转列Pivot函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • pandas应用之pivot函数

    2021-01-16 00:21:44
    pivot函数的定义 pivot(index=None,columns=None,values=None) -> DataFrame pivot函数的说明 通过给定的索引(index)和列(column)的值重新生一个DataFrame对象。 根据列值对数据进行整形(生成一个“透视”表)。...
    1、pivot函数的定义
    pivot(index=None,columns=None,values=None) -> DataFrame
    
    2、pivot函数的说明

    通过给定的索引(index)和列(column)的值重新生一个DataFrame对象。
    根据列值对数据进行整形(生成一个“透视”表)。从指定的索引/列中使用唯一的值来形成结果数据帧的轴。此函数不支持数据聚合,多个值将导致列中的多索引。

    3、pivo函数的参数

    index:指定一列做为生成DataFrame对象的索引,如果为空则默认为原来的索引。
    columns:指定一列的值作为列名,必须传值。
    values:指定一列作为生成DataFrame对象的值。可以为空。

    4、pivot函数实例
    df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
                        'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                        'baz': [1, 2, 3, 4, 5, 6],
                        'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
    

    在这里插入图片描述

    # 指定foo的值为新dataframe的index,bar的值为columns,dataframe中对应的值为baz
    df.pivot(index='foo', columns='bar', values='baz')
    

    在这里插入图片描述

    # 没有指定value,列名最外层保留原来的列,如下结果baz和zoo为原dataframe中的列名,新指定的列名bar在里层(暂时这么理解)。
    df.pivot(index='foo', columns='bar')
    

    在这里插入图片描述

    # 可以通过索引的方式取指定的列数据
    df.pivot(index='foo', columns='bar')['baz']
    

    在这里插入图片描述

    # 可以指定多个values
    df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
    

    在这里插入图片描述

    # 指定多个columns
    df.pivot(index='foo', columns=['bar','baz'], values=['zoo'])
    

    在这里插入图片描述

    # 指定多个index
    df.pivot(index=['foo','bar'], columns='baz', values='zoo')
    

    在这里插入图片描述

    # 指定多个index可以通过index名取当个index的数据
    df.pivot(index=['foo','bar'], columns='baz', values='zoo').loc["one",:]
    

    在这里插入图片描述

    # 这两行代码运行将会报错。
    # 报错提示:ValueError: Index contains duplicate entries, cannot reshape
    # 意思是指定的索引one有两个列bar=A冲突了。
    df = pd.DataFrame({"foo": ['one', 'one', 'two', 'two'],
                       "bar": ['A', 'A', 'B', 'C'],
                       "baz": [1, 2, 3, 4]})
    df.pivot(index='foo', columns='bar', values='baz')
    
    5、pivot函数在实际工作中解决的案例

    在这里插入图片描述
    现在要上图中的不同code之间从2020-11-16到2020-11-18三天内num序列数的相关性。
    首先,dataframe对象可以直接调用函数corr()计算不同列之间的相关性,所以现在需要将原始的dataframe对象转换成以code为列,date为索引,num为值的dataframe。
    第一种比较笨的方法就是循环,此方法不但代码量较多而且在数据量很大时会比较耗时。不建议使用

    grouped = df.groupby(by=["code"])
    df_num = pd.DataFrame()
    for name,group in grouped:
        d = pd.Series(data=group["num"].values,name=name)
        df_num = pd.concat([df_num,d],axis=1)
    
    df_close
    

    在这里插入图片描述
    第二种方法就是使用pivot函数,一行代码解决,运行快速。

    df_num = df.pivot(index='date',columns='code',values='num')
    

    在这里插入图片描述
    想要的形式的dataframe生成了就可以直接调用corr()函数直接求出code之间的相关性了

    # 计算列之间的相关性
    df_num.corr()
    

    在这里插入图片描述

    展开全文
  • 行转列 列转行函数使用场景 创建一个表 create table A_BANK ( NAME VARCHAR2(100), BANK VARCHAR2(50), MONEY NUMBER ) 插入几条数据 insert into A_BANK values ('jack','icbc',8800); insert into A_BANK ...

    废话不多说,先看行转列效果图,列转行就是图片顺序反过来
    在这里插入图片描述

    在这里插入图片描述

    1、行转列

    创建一个表

    create table A_BANK
    (
        NAME  VARCHAR2(100),
        BANK  VARCHAR2(50),
        MONEY NUMBER
    )
    

    插入几条数据

    insert into A_BANK values ('jack','icbc',8800);
    insert into A_BANK values ('jack','boc',9900);
    insert into A_BANK values ('lucy','icbc',10);
    insert into A_BANK values ('lucy','boc',69000);
    insert into A_BANK values ('jack','abc',7700);
    insert into A_BANK values ('lucy','abc',4);
    
    

    结果如 表1 所示

    NAMEBANKMONEY
    jackicbc8800
    jackboc9900
    lucyicbc10
    lucyboc6900
    jackabc7700
    lucyabc4
    表1

    通过pivot函数转换成以下格式

    select t.*,
           (t.icbc + t.boc + t.abc) as total
    from (select *
          from A_BANK pivot ( max(money) for bank in ('icbc' as icbc , 'boc' as boc, 'abc' as abc) )
         ) t;
    

    结果如 表2 所示

    bankicbcbocabctotal
    jack88009900770026400
    lucy1069000469014
    表2

    2、列转行

    也可以通过unpivot函数回转成表1格式,首先我们根据上面的结果创建另外一张表

    create table B_BANK as select t.*,
           (t.icbc + t.boc + t.abc) as total
    from (select *
          from A_BANK pivot ( max(money) for bank in ('icbc' as icbc , 'boc' as boc, 'abc' as abc) )
         ) t;
    

    然后对新表进行列转行操作

    select name,bank,money from B_BANK unpivot (money for bank in (icbc, boc, abc));
    

    结果如 表3 所示

    NAMEBANKMONEY
    jackicbc8800
    jackboc9900
    jackabc7700
    lucyicbc10
    lucyboc6900
    lucyabc4
    表3

    3、参考博文

    Oracle 行列转换函数pivot、unpivot的使用(二)

    展开全文
  • PIVOT函数--行转列

    千次阅读 2020-06-24 18:00:17
    首先我们来看下PIVOT函数的英文翻译: pivot:v 在枢轴上旋转(转动) 首先声明下PIVOT函数的语法格式为: SELECT [字段1,2,3…] FROM [表名] -- 将从##TEST表中选出的一些字段作为原表。 AS [原表别名] PIVOT...

    首先我们来看下PIVOT函数的英文翻译:

    pivot:v 在枢轴上旋转(转动)

    首先声明下PIVOT函数的语法格式为:

    SELECT [字段1,2,3…] FROM [表名]    -- 将从##TEST表中选出的一些字段作为原表。
    AS [原表别名]
    PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名]

     

    下面以例子讲解PIVOT函数:

    1、首先建立一个全局临时表

    -- 建立一个全局临时表。临时表还是挺好用的哈,不用写入数据库中,可以用来学习且不用切换数据库
    CREATE TABLE ##TEST( 
    	project VARCHAR(10), -- 课程 
    	student VARCHAR(20), -- 学生
    	score DECIMAL        -- 成绩
    )
    INSERT INTO ##TEST VALUES('语文','小林',85)
    INSERT INTO ##TEST VALUES('语文','小龙',89)
    INSERT INTO ##TEST VALUES('语文','小龙',98)
    INSERT INTO ##TEST VALUES('数学','小林',95)
    INSERT INTO ##TEST VALUES('数学','小龙',90)
    INSERT INTO ##TEST VALUES('英语','小明',99)
    INSERT INTO ##TEST VALUES('英语','小林',97)
    INSERT INTO ##TEST VALUES('英语','小龙',98)
    
    SELECT * FROM ##TEST 

    结果如下:

    然后我们写一个PIVOT用法,来看看它的效果:

    SELECT * FROM ##TEST
    AS p  -- 将选中的字段作为原表,对应的t表就是新表。
    PIVOT(SUM(score) FOR project IN([语文],[数学],[英语])) AS t

    可能一下看不懂,在本文的开头我们提到PIVOT的英文含义是在枢轴上旋转,上述sql语句中,直译过来就是原表p以project这个单元格作为枢轴,将project这一列逆时针旋转90度,并去重,原来project的行变成了新表t中的列。

    这样可能还不能得到我们想要的结果:

    你可能会疑问?为什么会出现聚合函数,我们知道,聚合函数是和GROUP BY一起使用的。这是因为除了PIVOT函数里出现的score和project字段外,原表p中的其他字段都将被GROUP BY,作为新表中的行,因为如此,使得PIVOT结果出现多行。

     

    补充一点:临时表只能执行一次,会暂时存贮在内存中,要想删除临时表,执行DROP TABLE ##TEST,即可。

     

     

     

     

    展开全文
  • sql中pivot函数的使用

    千次阅读 2020-09-03 14:56:29
    select * from DailyIncome ----第一步 pivot ( sum (IncomeAmount) ----第三步 for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步 ) as AvgIncomePerDay 来解释下,要想用好Pivot函数,...

    1.数据的创建

    create table DailyIncome(VendorId nvarchar(10), IncomeDay nvarchar(10), IncomeAmount int)
    
    --VendorId 供应商ID,
    --IncomeDay 收入时间
    --IncomeAmount 收入金额
    
    insert into DailyIncome values ('SPIKE', 'FRI', 100)
    insert into DailyIncome values ('SPIKE', 'MON', 300)
    insert into DailyIncome values ('FREDS', 'SUN', 400)
    insert into DailyIncome values ('SPIKE', 'WED', 500)
    insert into DailyIncome values ('SPIKE', 'TUE', 200)
    insert into DailyIncome values ('JOHNS', 'WED', 900)
    insert into DailyIncome values ('SPIKE', 'FRI', 100)
    insert into DailyIncome values ('JOHNS', 'MON', 300)
    insert into DailyIncome values ('SPIKE', 'SUN', 400)
    insert into DailyIncome values ('JOHNS', 'FRI', 300)
    insert into DailyIncome values ('FREDS', 'TUE', 500)
    insert into DailyIncome values ('FREDS', 'TUE', 200)
    insert into DailyIncome values ('SPIKE', 'MON', 900)
    insert into DailyIncome values ('FREDS', 'FRI', 900)
    insert into DailyIncome values ('FREDS', 'MON', 500)
    insert into DailyIncome values ('JOHNS', 'SUN', 600)
    insert into DailyIncome values ('SPIKE', 'FRI', 300)
    insert into DailyIncome values ('SPIKE', 'WED', 500)
    insert into DailyIncome values ('SPIKE', 'FRI', 300)
    insert into DailyIncome values ('JOHNS', 'THU', 800)
    insert into DailyIncome values ('JOHNS', 'SAT', 800)
    insert into DailyIncome values ('SPIKE', 'TUE', 100)
    insert into DailyIncome values ('SPIKE', 'THU', 300)
    insert into DailyIncome values ('FREDS', 'WED', 500)
    insert into DailyIncome values ('SPIKE', 'SAT', 100)
    insert into DailyIncome values ('FREDS', 'SAT', 500)
    insert into DailyIncome values ('FREDS', 'THU', 800)
    insert into DailyIncome values ('JOHNS', 'TUE', 600)
    

    平常的所用的是这样的

    select VendorId ,
    sum(case when  IncomeDay='MoN' then IncomeAmount else 0 end) MON,
    sum(case when  IncomeDay='TUE' then IncomeAmount else 0 end) TUE,
    sum(case when  IncomeDay='WED' then IncomeAmount else 0 end) WED,
    sum(case when  IncomeDay='THU' then IncomeAmount else 0 end) THU,
    sum(case when  IncomeDay='FRI' then IncomeAmount else 0 end) FRI,
    sum(case when  IncomeDay='SAT' then IncomeAmount else 0 end) SAT,
    sum(case when  IncomeDay='SUN' then IncomeAmount else 0 end) SUN
    from DailyIncome group by VendorId
    

    方式一:

    select * from DailyIncome ----第一步
    pivot 
    (
    sum (IncomeAmount) ----第三步
    for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步
    ) as AvgIncomePerDay
    

    来解释下,要想用好Pivot函数,应该理解代码注释中的这几步。
    第一步:肯定是要明白数据源了,这里是DailyIncome
    第二步:要明白要想让哪一列的值做新的列名字
    第三步:要明白对于这新的列要求那些值呢?

    select * from DailyIncome
    pivot (max (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxIncomePerDay
    where VendorId in ('SPIKE')
    

    select top 10 * from DailyIncome

    方式二:使用变量

    DECLARE @sql11 VARCHAR(max)
    
    SET @sql11='' --初始化变量@sql
    
    SELECT @sql11=@sql11+',['+ IncomeDay +']' FROM DailyIncome
    
    GROUP BY IncomeDay  --变量多值赋值
    
    SET @sql11=stuff(@sql11,1,1,'')--去掉首个','
    --print @sql11
    
    SET @sql11='select VendorId,'+@sql11+' from DailyIncome
    pivot (max (IncomeAmount) for IncomeDay  in ('+@sql11++')) as MaxIncomePerDay'
    exec(@sql11)
    
    展开全文
  • oracle-pivot函数用法

    千次阅读 2020-07-15 11:41:00
    pivot函数:对查询结果行转列进行统计 示例: 比如我想查每个用户投资的各种类型基金的分别有多少份额 平常的写法: select userID,fundtype,sum(shares) from userasset group by userID,fundtype; 查询结果: ...
  • HIVE实现pivot函数

    千次阅读 2020-05-22 15:04:38
    pivot是一个非常实用的函数 PIVOT的格式: SELECT [原表字段1,2,3…...但是hive里面没有自带pivot函数,所以我们需要自己实现 首先创建一组数据 CREATE TABLE IF NOT EXISTS pivot_test( id INT ,province STRING
  • 1.根据分类 ...pivot ( sum(nvl(金额,0)) for 分类字段 in( 0 as amt_jbgz,--基本工资 1 as amt_jj,--奖金 ... )) 2.添加后缀(多个行转列) select code, proname, amt_jbgz_shb, amt...
  • 列转行函数:decode、pivot 要求:将图1转换成图2格式 创表语句: create table score( cno varchar2(10), sno varchar2(10), dr number ); 插入数据: insert into score values (‘c001’,‘s003’,1); insert ...
  • 下面来说说SQLServer 中常用Pivot 函数(这里是用的数据库是SQLSERVER,与其他数据库是类似的,大家放心看就好) 让我们先从一个虚构的场景中来着手吧 万国来朝,很多供应商每天都汇报各自的收入情况。先来创建一个...
  • povit(聚合函数 for 转为列名的字段in(具体字段内容)) 现有如下数据(某店铺一周的收入) 我们如果想把周几作为列名,把收入作为行数据 表现为这样的形式 写法为 select *from week_income--第一步,查哪的数据 ...
  • sql server之pivot函数

    千次阅读 2018-06-13 16:00:20
    PIVOT用于将列值旋转为列名(即行转列) 今天整理以前的笔记时,发现以前在PPD实习的时候遇到一个场景,感觉很实用所以想记录一下,说不定以后能用到,话不多说,直接上案例:--表table1 问题编号 时间节点 ...
  • Oracle 行转列 pivot函数基本用法

    万次阅读 多人点赞 2018-09-30 23:28:05
    2018年9月30日22点,眼看着就10月份了,回头看下,8月份就写了一...所以暂时先写个Oracle自带的行转列函数pivot的基本用法。国庆几天看下有时间的话完善一下动态转列的做法,到时候再另写一篇附链接过来。 一、运...
  • 行转列方法 及 pivot函数使用问题

    万次阅读 2017-12-14 11:19:01
      如果有这样的需求,数据库插入的有A表这样的结果,展示要变成B表这样的结果(下边的这个图是摘自别人的,我主要说pivot函数那种方式) 对于这样的需求即需要行转列了。 1、第一种即是大家常见的。这种...
  • [MSSQL]采用pivot函数实现动态行转列

    万次阅读 2020-05-31 22:46:12
    在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,在2005以后新增了pivot函数之后,我可以利用这样函数来处理。 1. 环境要求:2005+ 在日常需求中经常会有行转列的事情需求处理,如果不是...
  • Oracle之pivot函数

    千次阅读 2018-03-20 01:55:45
    测试数据: CREATE   TABLE T   (   OWNER VARCHAR2(30),   OBJECT_TYPE VARCHAR2(100)...总结:计算原理group by 聚合函数计算列以外的其他列。 for纵向展示(作为字段),聚合计算和for以外的其他列 垂直展示
  • 我想问大家这段SQL代码,为什么pivot函数为什么要用sum,它不是求和吗? 答:(一定仔细看下面红字,答案就在其中)   create table test(id int,name varchar(20),quarter int,profile int) insert into test ...
  • pivot语法: SELECT a.值1 as 别名1,a.值2 as 别名2,a.值3 as 别名3,a.值... as 别名..., FROM table_name ---就是数据源 ---开始使用函数 PIVOT ( ---这里可用聚合函数来统计 sum(要统计的列名) FOR --列名1...
  • SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法。但是这样做...
  • Oracle Pivot函数语法详解及应用实例

    万次阅读 2016-12-30 18:05:06
    遇到一个难题,需要将单列数据根据分列显示,需要用到Pivot语法。 参照现有的query,写了一段类似以下script片段的sql语句,问题搞定。经验总结:能用SQL搞定的问题,就不要人工去处理(效率低、易出错)。 OCD AS...
  • PIVOT函数中必须要包含一个聚合函数,聚合函数分别是:COUNT、SUM、MAX、MIN、AVG,针对不同的使用场景,该选择哪个聚合函数,意义都是不一样的,下面还是举例说明吧! 我建了如下一张销售表并且插入一下测试值: ...
  • select '小明' as name,'数学' as...'语文' as subjects,98 as scores union select '小张' as name,'英语' as subjects,99 as scores) as tabs pivot ( sum(scores) for subjects in ([数学],[语文],[英语]) ) as 分数
  • PIVOT函数,行转列

    2019-01-02 23:19:48
    PIVOT函数的格式如下 PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N])) <聚合函数>就是...
  • 使用 PIVOT 和 UNPIVOT PIVOT 通过将表达式中的一个列的唯一值转换为输出中的多列,来轮替表值表达式。 PIVOT 在需要对最终输出所需的所有剩余列值执行聚合时运行聚合。 案例: SELECT FACTORYDATE AS DATE_TIME, ...
  • 我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较...PIVOT函数,行转列   PIVOT函数的格式如下 PIVOT(<聚合函数>...
  • 今天总结一下pandas的四个函数, stack, unstack, melt和pivot, 这四个函数再处理DataFrame结构的时候, 非常常用, 也非常好用, 具体的就来看一下。 pd.stack()和pd.unstack() 这两个方法在数据分析的时候也是...
  • oracle函数-pivot函数

    2019-04-18 15:03:59
    分数 审核类型 成绩类型 这3个字段(用在pivot函数中的字段)的其他字段分组 其他函数必须为聚合函数: 分数 审核类型 成绩类型 (按成绩类型把 分数,审核类型(为值) 从行转成列)     补充(动态in):...
  • 问题解决方法:尝试将结果集放到一个临时表,再使用pivot函数。 问题描述: 下面的sql中,select已经查出结果集,但加上pivot函数的时候,报CHINESE_NAME标识符无效, 之前一直以为是字段名字未指定,纠结了很久...
  • 公司业务要求,需要对一批数据大批量地进行动态行转列之后进行分析,而pivot 函数in中不能使用子查询,有个方法是说可以通过动态sql拼接的方法实现,在网上找了很久之后没找到具体的方法,就自己去摸索实现了。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,155
精华内容 12,062
关键字:

pivot函数