Oracle DB sql 将 table_names 模式分组
Oracle DB sql group the table_names patterns into a group
我正在尝试对各个组中的某些表格模式进行分类并显示结果这很好我包括了一个案例陈述并将其分类但如何对计数进行分组,让我们提供 sql 逻辑和现有结果和预期结果,以便理解。
数据库是Oracle 11g
SQL查询
select DISTINCT OBJECT_NAME ,count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE
'OTHER'
END
AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME'
and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by OBJECT_NAME
order by object_name;
现有结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 1
AB_BBC BBC 1
AB_CNBC CNBC 1
AB_PTV PTV 1
AB_CNN CNN 1
预期结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 120
AB_BBC BBC 130
AB_CNBC CNBC 20
AB_PTV PTV 80
AB_CNN CNN 600
如何达到预期效果?使用任何 WITH CTE ?
请提出最佳方法?
通过 case
表达式聚合:
select count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME' and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END
我正在尝试对各个组中的某些表格模式进行分类并显示结果这很好我包括了一个案例陈述并将其分类但如何对计数进行分组,让我们提供 sql 逻辑和现有结果和预期结果,以便理解。
数据库是Oracle 11g
SQL查询
select DISTINCT OBJECT_NAME ,count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE
'OTHER'
END
AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME'
and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by OBJECT_NAME
order by object_name;
现有结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 1
AB_BBC BBC 1
AB_CNBC CNBC 1
AB_PTV PTV 1
AB_CNN CNN 1
预期结果
OBJECT_NAME TABLE_GROUP COUNTS
AB_ABC ABC 120
AB_BBC BBC 130
AB_CNBC CNBC 20
AB_PTV PTV 80
AB_CNN CNN 600
如何达到预期效果?使用任何 WITH CTE ?
请提出最佳方法?
通过 case
表达式聚合:
select count(*) as COUNTS,
CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END AS TABLE_GROUP
from dba_objects
where owner='SCHEMA_NAME' and object_type='TABLE'
/*and OBJECT_NAME not like '%AB_ABC%'
and OBJECT_NAME not like '%AB_BBC%'
and OBJECT_NAME not like '%AB_CNBC%'
and OBJECT_NAME not like '%AB_PTV%'
and OBJECT_NAME not like '%AB_CNN%'
and OBJECT_NAME not like '%TEMP%'
and OBJECT_NAME not like '%SKY_TV%'*/
group by CASE
WHEN OBJECT_NAME LIKE '%AB_ABC%'
THEN 'ABC'
WHEN OBJECT_NAME LIKE 'AB_BBC%'
THEN 'BBC'
WHEN OBJECT_NAME LIKE 'AB_CNBC%'
THEN 'CNBC'
WHEN OBJECT_NAME LIKE 'AB_PTV%'
THEN 'PTV'
WHEN OBJECT_NAME LIKE 'AB_CNN%'
THEN 'CNN'
WHEN OBJECT_NAME LIKE '%TMP%'
THEN 'TEMP'
WHEN OBJECT_NAME LIKE '%TEMP%'
THEN 'TEMP'
ELSE 'OTHER'
END