返回多个值并以类似于数组的方式填充列

已经。

我在MacOSX上使用Postgres 9.3。

我想知道如何返回多个值(取决于某些条件)并使用它们以类似列表/数组的方式填充列?

--DUMMY DATA

CREATE TABLE tbl (
   id VARCHAR(2) PRIMARY KEY
  ,name TEXT
  ,year_born NUMERIC
  ,nationality TEXT
);
INSERT INTO tbl(id, name, year_born, nationality)
VALUES ('A1','Bill',2001,'American')
      ,('B1','Anna',1997,'Swedish')
      ,('A2','Bill',1991,'American')
      ,('B2','Anna',2004,'Swedish')
      ,('B3','Anna',1989,'Swedish')
      ,('A3','Bill',1995,'American');
SELECT * FROM tbl;

id | name | year_born | nationality
---+------+-----------+------------
A1 | Bill |   2001    |  American
B1 | Anna |   1997    |  Swedish
A2 | Bill |   1991    |  American
B2 | Anna |   2004    |  Swedish
B3 | Anna |   1989    |  Swedish
A3 | Bill |   1995    |  American

name, nationality通过使用SELECT DISTINCT ON以下代码中的子句汇总

CREATE TABLE another_tbl ( name TEXT, nationality TEXT, ids VARCHAR ); 

CREATE FUNCTION f1() RETURNS SETOF another_tbl AS
$$ SELECT DISTINCT ON (name, nationality) name, nationality, id
   FROM tbl
   GROUP BY name, nationality, ID;
$$ LANGUAGE sql

SELECT * FROM f1();

 name | nationality | ids 
------+-------------+-----
 Anna |  Swedish    | B1
 Bill |  American   | A1

因此,这是我不知道如何实现的事情,但是我认为这很容易。我希望该列ids由与该name列中名称对应的所有ID填充,如下所示。

所需的输出:

 SELECT * FROM f1();

 name | nationality | ids 
------+-------------+-----
 Anna |  Swedish    | B1, B2, B3
 Bill |  American   | A1, A2, A3

更新资料

发现了ARRAY我与类一起使用VARCHARidsanother_tbl但是,我接到一个不匹配的电话,说Final statement returns character varying instead of字符variant [] at column 3

欧文·布兰德斯特

如果需要文本列,请使用GROUP BY和聚合函数string_agg()
array_agg()构造一个数组。
但是放弃现在多余的DISTINCT ON

SELECT name, nationality, string_agg(id, ',') AS ids
FROM   tbl
GROUP  BY 1, 2
ORDER  BY 1, 2;

RETURNS函数定义子句必须匹配,例如@ozczecho建议:

CREATE FUNCTION f1()
  RETURNS TABLE(name text, nationality text, ids text) AS
                                              -- varchar[] for array_agg()
$func$
SELECT t.name, t.nationality, string_agg(t.id, ',') AS ids
FROM   tbl t
GROUP  BY 1, 2
ORDER  BY 1, 2;
$func$ LANGUAGE sql;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并以多种方式返回的多个数组/对象

来自分类Dev

类似于Python的数组填充-C等效

来自分类Dev

用类似于mysql query的方式对group()进行sum()但在php中使用多个数组

来自分类Dev

按值获取数组元素的方式类似于通过$ key获取

来自分类Dev

函数类似于“何时”,但返回值?

来自分类Dev

JavaScript对象数字索引的排序方式类似于数组

来自分类Dev

类似于“ SubArray”,但具有多个父数组?

来自分类Dev

在Firebase中查询多个值,类似于IN()SQL功能

来自分类Dev

从数组返回多个值

来自分类Dev

如何返回JSON数据,类似于XML从数据库asp.net返回数据的方式

来自分类Dev

删除数据框列,其中行值类似于“ []”

来自分类Dev

以pythonic方式编写多个for循环(包括一个类似于sum()函数的循环)

来自分类Dev

是否有一个类似于STL的函数用索引的某些函数填充数组?

来自分类Dev

初始化多个Numpy数组(多个分配)-类似于MATLAB Deal()

来自分类Dev

Delphi动态数组的工作方式类似于ListView中的ListItem

来自分类Dev

Android自动填充键,类似于搜索引擎的TextBox中的值

来自分类Dev

正在传递地址,但是它的工作方式类似于在C中按值调用?

来自分类Dev

以类似于注释的方式链接 Django QuerySets

来自分类Dev

一个用于填充上一管道命令的输出的列(类似于printf)的衬里?

来自分类Dev

如何为值数组实现类似于ISBETWEEN的函数,而不必多次计算数组?

来自分类Dev

如何填充 BST 并以 Inorder 方式打印

来自分类Dev

使用来自具有多个值的过滤列的唯一值填充数组

来自分类Dev

Swift返回将对数组进行排序的索引(类似于numpy argsort)

来自分类Dev

Swift返回将对数组进行排序的索引(类似于numpy argsort)

来自分类Dev

具有多个维度的numpy数组的类似于列表理解的方法

来自分类Dev

NumPy:创建类似于“重复”的布尔数组,但具有多个维度

来自分类Dev

基本函数的行为类似于`cat`,但返回值而不是写入文件

来自分类Dev

是否存在类似于C的“ Return”的全局关键字,用于从VBA函数返回值?

来自分类Dev

如何使用子查询返回的值列表查询类似于“ NOT IN”的mongodb集合

Related 相关文章

  1. 1

    合并以多种方式返回的多个数组/对象

  2. 2

    类似于Python的数组填充-C等效

  3. 3

    用类似于mysql query的方式对group()进行sum()但在php中使用多个数组

  4. 4

    按值获取数组元素的方式类似于通过$ key获取

  5. 5

    函数类似于“何时”,但返回值?

  6. 6

    JavaScript对象数字索引的排序方式类似于数组

  7. 7

    类似于“ SubArray”,但具有多个父数组?

  8. 8

    在Firebase中查询多个值,类似于IN()SQL功能

  9. 9

    从数组返回多个值

  10. 10

    如何返回JSON数据,类似于XML从数据库asp.net返回数据的方式

  11. 11

    删除数据框列,其中行值类似于“ []”

  12. 12

    以pythonic方式编写多个for循环(包括一个类似于sum()函数的循环)

  13. 13

    是否有一个类似于STL的函数用索引的某些函数填充数组?

  14. 14

    初始化多个Numpy数组(多个分配)-类似于MATLAB Deal()

  15. 15

    Delphi动态数组的工作方式类似于ListView中的ListItem

  16. 16

    Android自动填充键,类似于搜索引擎的TextBox中的值

  17. 17

    正在传递地址,但是它的工作方式类似于在C中按值调用?

  18. 18

    以类似于注释的方式链接 Django QuerySets

  19. 19

    一个用于填充上一管道命令的输出的列(类似于printf)的衬里?

  20. 20

    如何为值数组实现类似于ISBETWEEN的函数,而不必多次计算数组?

  21. 21

    如何填充 BST 并以 Inorder 方式打印

  22. 22

    使用来自具有多个值的过滤列的唯一值填充数组

  23. 23

    Swift返回将对数组进行排序的索引(类似于numpy argsort)

  24. 24

    Swift返回将对数组进行排序的索引(类似于numpy argsort)

  25. 25

    具有多个维度的numpy数组的类似于列表理解的方法

  26. 26

    NumPy:创建类似于“重复”的布尔数组,但具有多个维度

  27. 27

    基本函数的行为类似于`cat`,但返回值而不是写入文件

  28. 28

    是否存在类似于C的“ Return”的全局关键字,用于从VBA函数返回值?

  29. 29

    如何使用子查询返回的值列表查询类似于“ NOT IN”的mongodb集合

热门标签

归档