You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Oracle SQL查询:隐藏行级NUM_VIEWS仅保留OWNER分组求和

实现Oracle SQL*Plus分组仅显示汇总行数值的方案

要实现你需要的输出效果,核心是利用SQL*Plus的格式化命令(BREAK、COMPUTE)来控制显示,同时调整查询语句去掉每行的冗余数值,具体步骤如下:

调整后的完整脚本

-- 设置分组规则:重复OWNER不显示,分组间空一行
BREAK ON OWNER DUPLICATES SKIP 1
-- 格式化各列显示宽度
COL OWNER FORMAT a8
COL GRANTEE FORMAT a10
COL TABLE_NAME FORMAT a26
COL PRIVILEGE FORMAT a12
-- 格式化NUM_VIEWS列,空值显示为空格
COL NUM_VIEWS FORMAT 999999 HEADING 'NUM_VIEWS' NULL ''
-- 设置页面和行宽
SET PAGES 1000 LINES 180

-- 查询符合条件的记录,NUM_VIEWS列留空
SELECT OWNER, GRANTEE, TABLE_NAME, PRIVILEGE, NULL AS NUM_VIEWS
FROM dba_tab_privs 
WHERE GRANTEE LIKE '%AAAAA%' 
AND (OWNER LIKE 'BBBBB%' OR OWNER='CCCCC')
ORDER BY OWNER, GRANTEE, TABLE_NAME;

-- 计算每个OWNER分组的记录总数,显示为sum
COMPUTE COUNT LABEL 'sum' OF OWNER ON OWNER

关键说明

  • 移除冗余分组计算:原查询中GROUP BY四个字段后每条记录的count(*)都是1,属于冗余操作,直接查询原始记录即可。
  • BREAK命令控制分组展示:ON OWNER DUPLICATES让同一OWNER的重复值不显示,SKIP 1在不同OWNER分组间添加空行,匹配你期望的输出样式。
  • COMPUTE命令生成汇总行:COUNT LABEL 'sum' OF OWNER ON OWNER会在每个OWNER分组结束后统计记录总数,显示为sum行,SQL*Plus会自动添加分隔线(********)。
  • 空值格式化控制:COL NUM_VIEWS NULL ''让每行的NUM_VIEWS列显示为空格,仅保留汇总行的数值。

执行上述脚本后,输出会完全符合你的需求:每行不显示NUM_VIEWS的具体数值,仅在每个OWNER分组末尾显示该组的总数。

内容的提问来源于stack exchange,提问作者Jes Challand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:43:19