当前位置: 首页 > 面试题库 >

等效于Oracle XE 11.2中PostgreSQL的array_agg

郁高韵
2023-03-14
问题内容

我有一个Oracle 11g XE数据库,并且有一个查询结果集:

ID   Category
1    Cat1
1    Cat2
2    Cat3
2    Cat4

我想在逗号分隔的同一行中获得所有相关类别的不同ID,像这样

ID   Categories
1    Cat1,Cat2
2    Cat3,Cat4

我以前使用过Postgres,并array_agg在那里提供了帮助。如何在Oracle 11g XE中获得相同的结果?


问题答案:

除非您在存储过程中使用它来将输出另存为数组(或集合),否则使用的查询LISTAGG应该足够并提供相同的输出。

select ID , LISTAGG(Category,',') WITHIN GROUP ( ORDER BY ID ) Categories
FROM yourtable GROUP BY ID;

在oracle中,我们没有像这样的简单转换函数array_agg。但是,您可以创建用户定义的集合类型,然后使用CASTCOLLECT函数将其转换为NESTED TABLE以获得相同的所需输出。

首先,创建一个集合TYPE

create or replace TYPE categorytype as TABLE OF VARCHAR2(20);

现在,运行此查询等效于使用string_aggLISTAGG,尽管categories它是数组或 集合 ,而不是字符串。

select id, CAST ( COLLECT(Category) as categorytype ) categories
FROM yourtable group by id;

| ID | CATEGORIES |
|----|------------|
|  1 |  Cat1,Cat2 |
|  2 |  Cat3,Cat4 |

演示



 类似资料:
  • 问题内容: 我想知道PostgreSQL中的数据类型等效吗? 问题答案: 根据文档,您好像是您的朋友,范围从-9223372036854775808到9223372036854775807。

  • 问题内容: 我必须用最新的PostgreSQL替换Oracle驱动程序。PostgreSQL不知道函数LISTAGG。我必须将值用逗号分隔。PostgreSQL中Oracle函数的等效功能是什么? 问题答案: PostgreSQL中的等效功能是 string_agg :连接到字符串中的输入值,由定界符分隔 例如,在Apache Ofbiz 17.12.04中获取所有列表,然后用字符串表示它。

  • 问题内容: 我有一张桌子,我想将每个ID与连接的字段值连接成一行。 例如,在我的表格中,我有以下内容: 我想输出: 在MySQL中,我能够使用聚合函数,但是在这里似乎不起作用… PostgreSQL是否具有等效功能,或者还有另一种方法可以实现此目的? 问题答案: 这可能是一个很好的起点(仅限8.4+版本): array_agg返回一个数组,但是您可以根据需要对其进行文本转换和编辑(请参见下面的说明

  • 问题内容: 我正在尝试将一些JavaScript代码从MicrosoftAjax移到JQuery。我在MicrosoftAjax中使用了流行的.net方法中的JavaScript等效项,例如String.format(),String.startsWith()等。jQuery中是否具有等效项? 问题答案: ASP.NET AJAX的源代码可供您参考,因此您可以仔细阅读它,并将要继续使用的部分包含在

  • 问题内容: 是否有类似Android上的内容。我知道如何创建自己的线程,但是有没有像摆动计时器那样的东西? 问题答案: 还有Java的TimerTask。这是我的代码中播放音频样本的示例:

  • 问题内容: 我想知道是否有一种方法可以仅使用html在另一个html内包含一些html内容? 替代PHP 这可能吗? 编辑: 这引起了一些混乱,我需要的是“几乎是html标签”,该标签具有在另一个文档中包含html文档的功能。 问题答案: 它不能完全通过HTML来完成。(不过,有iframe,但在这种情况下我认为不符合要求。) 可以使用JavaScript来完成。您可以通过Ajax获得另一个文件,