如何在Oracle的Pivot语句中添加行总计?
解决Pivot查询添加行总计的问题
嗨,这事儿好办!你只需要在Pivot后的查询里直接把统计出来的worker和manager列相加,就能得到每行的总计啦。我帮你优化了原SQL,不仅实现了需求,还让代码更易读:
SELECT STATUS, worker, manager, worker + manager AS Total FROM ( -- 只选需要的列,避免冗余数据,提升效率 SELECT STATUS, title FROM ta ) PIVOT ( COUNT(title) -- 给pivot生成的列起别名,不用带单引号,方便后续引用 FOR title IN ('worker' AS worker, 'manager' AS manager) )
为什么这么改?
- 优化子查询:原语句里的
select *会把表中所有列都带入pivot,但我们只需要STATUS和title来统计,所以只选这两列更高效。 - 列别名处理:在
PIVOT的IN子句里给每个title值指定别名(比如'worker' AS worker),这样生成的列名是干净的worker和manager,不用处理带单引号的特殊列名。 - 计算行总计:直接把
worker和manager的数值相加,命名为Total,就得到了每行的统计总和。
执行后你会得到期望的结果:
STATUS worker manager Total
started 3 1 4
finished 4 5 9
ready 3 4 7
如果你不想修改pivot里的别名,也可以直接引用原带单引号的列(注意要用双引号包裹),SQL如下:
SELECT STATUS, "'worker'", "'manager'", "'worker'" + "'manager'" AS Total FROM ( SELECT * FROM ta ) PIVOT ( COUNT(title) FOR title IN ('worker', 'manager') )
不过还是更推荐第一种写法,代码可读性更高哦!
内容的提问来源于stack exchange,提问作者dataman
相关产品推荐
相关产品推荐

