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