SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择

PIVOT函数中必须要包含一个聚合函数,聚合函数分别是:COUNT、SUM、MAX、MIN、AVG,针对不同的使用场景,该选择哪个聚合函数,意义都是不一样的,下面还是举例说明吧!

我建了如下一张销售表并且插入一下测试值:

CREATE TABLE SalesOrder
(
	门店 VARCHAR(50),
	商品类型 VARCHAR(50),
	销售额 INT
)
INSERT INTO SalesOrder
SELECT  'ShopA','A',round(100+100*rand(),0)	UNION ALL
SELECT  'ShopA','A',round(100+100*rand(),0)	UNION ALL
SELECT  'ShopA','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopA','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopA','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopA','C',round(1000+100*rand(),0)UNION ALL
SELECT  'ShopB','A',round(100+100*rand(),0)	UNION ALL
SELECT  'ShopB','A',round(100+100*rand(),0)	UNION ALL
SELECT  'ShopB','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopB','C',round(1000+100*rand(),0)UNION ALL
SELECT  'ShopB','C',round(1000+100*rand(),0)UNION ALL
SELECT  'ShopC','A',round(100+100*rand(),0)	UNION ALL
SELECT  'ShopC','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopC','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopC','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopC','B',round(200+100*rand(),0)	UNION ALL
SELECT  'ShopC','C',round(1000+100*rand(),0)UNION ALL
SELECT  'ShopC','C',round(1000+100*rand(),0)
下面我要在PIVOT行转列函数中,使用不同的聚合函数,更直观的统计各个“门店”以及各个”商品类型“的销售情况:

1.SUM:
SELECT * FROM SalesOrder
PIVOT(SUM(销售额) FOR 商品类型 IN(A,B,C)) AS PVT

统计的是各个门店,各个商品类型的总的销售额。

2.COUNT:
SELECT * FROM SalesOrder
PIVOT(COUNT(销售额) FOR 商品类型 IN(A,B,C)) AS PVT

统计的是各个门店,各个商品类型的销售量。

3.MAX:
SELECT * FROM SalesOrder
PIVOT(MAX(销售额) FOR 商品类型 IN(A,B,C)) AS PVT

统计的是各个门店,各个商品类型卖得最贵的销售额。

4.MIN:
SELECT * FROM SalesOrder
PIVOT(MIN(销售额) FOR 商品类型 IN(A,B,C)) AS PVT

和MAX相反,统计的是最便宜的销售额

5.AVG
SELECT * FROM SalesOrder
PIVOT(AVG(销售额) FOR 商品类型 IN(A,B,C)) AS PVT

统计的是各个门店,各个商品类型的销售额的平均值



猜你喜欢

转载自blog.csdn.net/Wikey_Zhang/article/details/76849826