sql PivotTable

本文展示了一段SQL脚本,该脚本用于从Person.Person表中按年份和类型统计不同人员的数量,并计算每年的总数量。通过游标遍历每一年的数据,实现了对历史数据的高效统计。
declare @year int;
declare @sum int;
truncate table dbo.temp

declare cur Cursor
for
select distinct year(ModifiedDate) from Person.Person order by year(ModifiedDate) asc ;

open cur;
fetch next from cur into @year
while @@FETCH_STATUS=0
begin
print @year
insert into dbo.temp select year(ModifiedDate) ,PersonType,count(BusinessEntityID) from Person.Person group by year(ModifiedDate),PersonType having year(ModifiedDate)=@year ;
set @sum=0
select @sum=count(BusinessEntityID) from person.Person where year(ModifiedDate)=@year
insert into dbo.temp values(null,convert(nvarchar(10),@year), @sum)
fetch next from cur into @year
end
select * from dbo.temp
close cur
DEALLOCATE cur

years persontyoe counts
2006 EM 1
2006 GC 1
NULL 2006 2
2007 EM 8
2007 GC 8
NULL 2007 16
2008 EM 83
2008 GC 83
NULL 2008 166
2009 EM 135
2009 GC 135
NULL 2009 270
2010 EM 36
2010 SP 1
2010 GC 36
NULL 2010 73
2011 EM 5
2011 IN 1201
2011 SP 9
2011 SC 238
2011 VC 63
2011 GC 14
NULL 2011 1530
2012 IN 2743
2012 SP 4
2012 SC 250
2012 VC 93
2012 GC 4
NULL 2012 3094
2013 EM 3
2013 IN 8522
2013 SP 3
2013 SC 251
2013 GC 6
NULL 2013 8785
2014 EM 2
2014 IN 6018
2014 SC 4
2014 GC 2
NULL 2014 6026
2015 SC 10
NULL 2015 10
### Pivot TableSQL GROUP BY 的功能和使用场景对比 #### 功能对比 Pivot TableSQL GROUP BY 都是对数据进行分组和聚合的操作,但它们在实现方式和灵活性上存在显著差异。以下是两者的主要功能对比: 1. **分组维度** - 在 SQL 中,`GROUP BY` 是显式地指定需要分组的列,并结合聚合函数(如 `SUM()`、`AVG()` 等)对数据进行汇总[^2]。 - Pivot Table 则允许更复杂的多维分组操作。例如,在 Pandas 中,`pivot_table` 可以通过 `index` 参数指定行分组字段,同时通过 `columns` 参数指定列分组字段[^1]。 2. **结果结构** - `GROUP BY` 的结果通常是二维表形式,每一行代表一个分组的结果。 - Pivot Table 的结果可以是多维表形式,适合展示复杂的数据关系。例如,可以通过 `columns` 参数生成交叉表,使得数据更加直观[^1]。 3. **聚合函数** - `GROUP BY` 支持多种聚合函数,但这些函数通常只能用于单个维度的汇总。 - Pivot Table 同样支持多种聚合函数,但在多维场景下更为灵活。例如,可以通过 `aggfunc` 参数指定不同的聚合逻辑[^1]。 4. **行列转换** - `GROUP BY` 不直接支持行列转换,需要通过额外的查询或工具实现。 - Pivot Table 内置了行列转换的功能,可以直接将某些值作为列标题显示[^3]。 #### 使用场景对比 1. **SQL GROUP BY 的适用场景** - 数据存储在数据库中,且需要高效地执行分组和聚合操作时,`GROUP BY` 是首选。 - 当只需要简单的分组和聚合结果时,`GROUP BY` 提供了足够的功能和性能保障[^2]。 2. **Pivot Table 的适用场景** - 数据需要以多维表格的形式展示时,Pivot Table 更加直观和易读。 - 需要对数据进行行列转换或复杂分组时,Pivot Table 提供了更高的灵活性。 - 数据分析过程中,需要快速生成报表或可视化图表时,Pivot Table 是更好的选择。 #### 示例代码 以下是一个简单的对比示例,展示如何使用 Pandas 的 `groupby` 和 `pivot_table` 实现类似功能。 ```python import pandas as pd # 创建示例数据 data = { '区域': ['A', 'A', 'B', 'B', 'C'], '版块': ['X', 'Y', 'X', 'Y', 'Z'], '单价': [10, 20, 30, 40, 50] } df = pd.DataFrame(data) # 使用 groupby 实现分组和聚合 grouped_results = df.groupby(['区域', '版块'], as_index=False)['单价'].sum() print("Group By 结果:") print(grouped_results) # 使用 pivot_table 实现分组和聚合 pivot_results = pd.pivot_table(df, index=['区域'], columns=['版块'], values=['单价'], aggfunc=sum) print("\nPivot Table 结果:") print(pivot_results) ``` #### 输出解释 - `groupby` 的结果是一个二维表,每行对应一个分组的结果。 - `pivot_table` 的结果是一个多维表,展示了不同区域和版块之间的单价汇总情况。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值