`

Oracle高级应用之去重聚合函数

    博客分类:
  • db
 
阅读更多

开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步,很猥琐的对同学说:“你看前面那个肥婆跑得屁股都甩圆了!”这货沉默了一下。当我们和大妈擦身而过的时候,他喊道:“妈....”

本例实现的是连接字符串,并且去掉重复的项。

聚合函数实际上就是一个对象:

  1. create or replace type distinct_concat_type as object  
  2. (  
  3. --对象变量  
  4.   cat_string varchar2(500),  
  5. --对象初始化  
  6.   static function ODCIAggregateInitialize(cs_ctx In Out distinct_concat_type)  
  7.     return number,  
  8. --聚合函数的迭代方法  
  9.   member function ODCIAggregateIterate(self  In Out distinct_concat_type,  
  10.                                        value in varchar2) return number,  
  11. --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合  
  12.   member function ODCIAggregateMerge(self In Out distinct_concat_type,  
  13.                                      ctx2 In Out distinct_concat_type)  
  14.     return number,  
  15. --终止聚集函数的处理,返回聚集函数处理的结果  
  16.   member function ODCIAggregateTerminate(self        In Out distinct_concat_type,  
  17.                                          returnValue Out varchar2,  
  18.                                          flags       in number)  
  19.     return number  
  20. )  

接着实现对象主体:

  1. create or replace type body distinct_concat_type is  
  2.   --对象初始化  
  3.   static function ODCIAggregateInitialize(cs_ctx IN OUT distinct_concat_type)  
  4.     return number is  
  5.   begin  
  6.     cs_ctx := distinct_concat_type(null);  
  7.     return ODCIConst.Success;  
  8.   end;  
  9.   
  10.   --聚合函数的迭代方法  
  11.   member function ODCIAggregateIterate(self  IN OUT distinct_concat_type,  
  12.                                        value IN varchar2) return number is  
  13.   begin  
  14.     if self.cat_string is null or (instr(self.cat_string, value, 1, 1) = 0) then  
  15.       self.cat_string := self.cat_string || ',' || value;  
  16.     end if;  
  17.     return ODCIConst.Success;  
  18.   end;  
  19.   
  20.   --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合  
  21.   member function ODCIAggregateMerge(self IN OUT distinct_concat_type,  
  22.                                      ctx2 IN Out distinct_concat_type)  
  23.     return number is  
  24.   begin  
  25.     if self.cat_string is null or  
  26.        (instr(self.cat_string, ctx2.cat_string, 1, 1) = 0) then  
  27.       self.cat_string := self.cat_string || ',' || ctx2.cat_string;  
  28.     end if;  
  29.     return ODCIConst.Success;  
  30.   end;  
  31.   
  32.   --终止聚集函数的处理,返回聚集函数处理的结果  
  33.   member function ODCIAggregateTerminate(self        IN Out distinct_concat_type,  
  34.                                          returnValue OUT varchar2,  
  35.                                          flags       IN number) return number is  
  36.   begin  
  37.     returnValue := ltrim(rtrim(self.cat_string, ','), ',');  
  38.     return ODCIConst.Success;  
  39.   end;  
  40. end;  


最后定义函数,使用的是上面定义的对象:

  1. create or replace function distinct_concat(input varchar2) return varchar2  
  2.   parallel_enable  
  3.   aggregate using distinct_concat_type; 
分享到:
评论

相关推荐

    wm_concat函数DDL.zip

    自定义`wm_concat`函数的一种常见方法是创建一个聚合函数,通常使用PL/SQL实现。以下是一个简单的例子: ```sql CREATE OR REPLACE FUNCTION WM_CONCAT (p_val VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE ...

    oracle 数据库实用指南

    - 训练12展示了GROUP BY和聚合函数(COUNT, AVG, MAX)的使用,可以按部门统计雇员数量、计算平均工资和找出最高工资。 6. 嵌套查询: - 训练13解释了嵌套查询的概念,通过嵌套的SELECT语句来获取子查询的结果,...

    oracle开发学习资料

    在实际开发中,你还需要学习更多高级查询技巧,如联接(JOINs)、子查询、聚合函数(GROUP BY和HAVING)、排序(ORDER BY)以及条件过滤(WHERE子句)等。随着经验的增长,你将能够编写更复杂的SQL语句来满足各种...

    sql高级进阶

    标签为“SQL”,意味着所有知识点围绕SQL语言的高级应用和技巧。 在【部分内容】中,提供了一系列具体的SQL高级应用主题,以下是基于这些主题的详细知识点: 1. 单表查询 - 查询表中所有的行与列:使用SELECT * ...

    oracle复习笔记01

    根据提供的文件信息,我们可以归纳出一系列关于Oracle数据库的重要知识点,这些知识点主要涵盖了SQL查询语句的基本用法、数据处理函数的应用、以及高级查询技巧等。接下来将对这些知识点进行详细的阐述。 ### 1. ...

    Oracle数据库讲义

    - **实验17:** 学习使用聚合函数如`COUNT`, `SUM`, `AVG`等进行分组统计。例如,`SELECT department_id, COUNT(*) AS num_employees FROM employees GROUP BY department_id;`。 **14. 表连接** - **实验18:** ...

    Oracle经典练习题及标准答案

    这些练习题覆盖了Oracle数据库中的基础到高级查询技术,包括基本的SELECT查询、条件筛选、函数应用、排序操作、分组统计、子查询等核心概念和技术。对于学习Oracle数据库管理的人来说,熟练掌握这些知识点是非常重要...

    Oracle查询操作的学习笔记

    - **高级权限授予**:如果需要给予用户更多的权限,并允许该用户进一步将这些权限转授给其他用户,则可以使用`WITH GRANT OPTION`。例如,`GRANT SELECT ON scott.emp TO xiaoming WITH GRANT OPTION;` - **撤销权限...

    Oracle经典学习笔记

    以上总结了从“Oracle经典学习笔记”中提取的关键知识点,覆盖了Oracle数据库中SQL语言的基本语法和高级查询技术,包括数据查询、筛选、排序、函数应用以及多表连接和数据汇总等核心操作。掌握这些知识点将有助于更...

    ORACLE 查询.docx

    - **聚合函数**用于统计一组数据,如`SUM()`求和,`AVG()`求平均值,如`SELECT SUM(usenum) FROM T_ACCOUNT WHERE year='2012'`(求和)和`SELECT AVG(usenum) FROM T_ACCOUNT WHERE year='2012'`(求平均)。...

    oracle笔记大全

    ### Oracle笔记大全知识点详解 #### 一、Oracle SQL 基础 - **SQL (Structured Query Language)**:...通过这些知识点的学习,可以更好地理解和应用 Oracle 数据库中的各种功能和技术,提高工作效率和解决问题的能力。

    五月:Oracle数据库总结(一)

    除了基础查询,SQL还提供了更复杂的查询方式,如联接(JOIN)、子查询、集合操作(UNION、INTERSECT、EXCEPT)、分组(GROUP BY)和聚合函数(SUM、COUNT、AVG、MAX、MIN)。这些功能使得SQL能够处理更复杂的数据...

    fme 内置的函数功能介绍

    - **功能**:支持基本算术运算(如加减乘除)、逻辑运算以及更高级的数学函数(如三角函数)。 - **应用场景**:例如,可以通过这些转换器计算出两个点之间的距离或者根据某些条件动态生成新属性。 #### 四、收集器...

    SQL语句笔记

    - `HAVING AVG(cc) 子句用于对聚合后的结果进行过滤,不同于`WHERE`子句,它允许使用聚合函数。 - `SELECT * FROM table1 UNION SELECT * FROM table2`:`UNION`操作用于合并两个查询的结果集,自动去重。 - **表...

    SQL语法入门教程手册v1.1

    - **数据聚合**:通过`GROUP BY`子句对数据进行分组,并使用`COUNT`, `MAX`, `MIN`, `AVG`, `SUM`等聚合函数对分组后的数据进行统计分析。 - **结果去重**:使用`DISTINCT`关键字去除查询结果中的重复记录。 - **...

    经典SQL语句大全 update select delete drop create

    6. **聚合函数**: - `COUNT(*)`:计算表中的记录总数。 - `SUM(field)`:计算指定字段的总和。 - `AVG(field)`:计算指定字段的平均值。 - `MAX(field)`:找出指定字段的最大值。 - `MIN(field)`:找出指定...

    SQL题汇总及分析(S18-29)CP8.doc

    通过以上对文档内容的分析,我们可以看到,SQL题汇总及分析(S18-29)覆盖了SQL语言的基础语法和高级应用,包括但不限于数据定义、数据查询、数据操作等多个方面。对于初学者来说,掌握这些知识点是非常重要的基础。...

    21天学会sql

    - **GROUP BY子句**:将数据分组,通常与聚合函数一起使用。 - **HAVING子句**:用于过滤GROUP BY子句生成的结果集。 #### 第六部分:表的联合 - **介绍**:联合多个表中的数据,以便进行更复杂的数据分析。 - **...

    mySQL培训手册

    - **1.2.3.4.19 聚合函数** - 如`COUNT()`, `SUM()`, `AVG()`等。 - **1.2.3.4.20 分组函数,group by子句** - 使用`GROUP BY`子句按指定列分组。 - **1.2.3.4.21 分组函数,having子句** - 使用`HAVING`子句...

Global site tag (gtag.js) - Google Analytics