标签: array-agg

PostgreSQL array_agg命令

表'动物':

animal_name animal_type
Tom         Cat
Jerry       Mouse
Kermit      Frog
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT 
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Run Code Online (Sandbox Code Playgroud)

预期结果:

Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Run Code Online (Sandbox Code Playgroud)

我可以确定第一个聚合函数中的顺序将始终与第二个中的顺序相同.我的意思是我不想得到:

Tom;Jerry;Kermit, Frog;Mouse,Cat
Run Code Online (Sandbox Code Playgroud)

postgresql array-agg

90
推荐指数
3
解决办法
6万
查看次数

如何删除使用array_agg postgres函数生​​成的重复项

有没有人知道如何重写以下SQL查询来生成结果,那将只包含一次出现的名称?(按用户分组的结果).

查询

SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1
Run Code Online (Sandbox Code Playgroud)

可执行查询可在sqlfiddle.com获得.单击Run SQL按钮,结果将包含两次Frantisek Smith

sql postgresql select array-agg

38
推荐指数
2
解决办法
3万
查看次数

如何使array_agg()像mySQL中的group_concat()一样工作

所以我有这张桌子:

create table test (
   id integer, 
   rank integer,
   image varchar(30)
); 
Run Code Online (Sandbox Code Playgroud)

然后一些值:

id | rank | image   
---+------+-------  
 1 |    2 | bbb  
 1 |    3 | ccc  
 1 |    1 | aaa  
 2 |    3 | c  
 2 |    1 | a  
 2 |    2 | b  
Run Code Online (Sandbox Code Playgroud)

我想按id对它们进行分组,并按照rank排序顺序连接图像名称.在mySQL中,我可以这样做:

  select id, 
         group_concat( image order by rank asc separator ',' ) 
    from test 
group by id;
Run Code Online (Sandbox Code Playgroud)

输出将是:

__PRE__
有没有办法在postgresql中有这个?

如果我尝试使用array_agg(),名称将不会以正确的顺序显示,显然我无法找到对它们进行排序的方法.(我使用的是postgres 8.4)

postgresql array-agg

22
推荐指数
1
解决办法
4万
查看次数

如何将两个PostgreSQL列聚合到由括号分隔的数组中

我想使用group-by查询连接两列,从而产生一个用括号分隔的数组.我知道这个问题与这个问题有关,但像往常一样,我的用例有点不同.

一个简单的例子(也作为SQL Fiddle).目前我的查询返回以下内容:

ID  X   Y
3   0.5 2.71
3   1.0 2.50
3   1.5 2.33
6   0.5 2.73
6   1.5 2.77
Run Code Online (Sandbox Code Playgroud)

但是我希望连接/聚合X/ Y列以获得以下内容:

ID  XY
3   [[0.5,2.71],[1.0,2.50],[1.5,2.33]]
6   [[0.5,2.73],[1.5,2.77]]
Run Code Online (Sandbox Code Playgroud)

目前我已经尝试将列连接成一个如下:

SELECT "ID",concat_ws(', ',"X", "Y") as XY FROM Table1;
Run Code Online (Sandbox Code Playgroud)

哪个回报:

ID  xy
3   0.5, 2.71
3   1, 2.50
3   1.5, 2.33
6   0.5, 2.73
Run Code Online (Sandbox Code Playgroud)

用过array_agg():

SELECT "ID",array_to_string(array_agg("X"),',') AS XY
FROM Table1
GROUP BY "ID";
Run Code Online (Sandbox Code Playgroud)

导致:

ID  xy
3   0.5,1,1.5
6   0.5
Run Code Online (Sandbox Code Playgroud)

我觉得我越来越近了,但是我会非常感激.

sql arrays postgresql concatenation array-agg

14
推荐指数
2
解决办法
2万
查看次数

array_agg 在 postgres 9.4 中有不同的作品,但在 postgres 9.6 中没有

我有一个查询,它使用带有 distinct 作为参数的 array_agg 并且在 postgres 9.6 上不被接受。

我创建了这个示例来说明这个问题:

create table numbers (id integer primary key, name varchar(10));
insert into numbers values(1,'one');
insert into numbers values(2,'two');
Run Code Online (Sandbox Code Playgroud)

postgres 9.4

select array_agg(distinct(id)) from numbers;
 array_agg 
-----------
 {1,2}
Run Code Online (Sandbox Code Playgroud)

postgres 9.6

ERROR:  function array_agg(integer) is not unique
LINE 1: select array_agg(distinct(id)) from numbers;
               ^
HINT:  Could not choose a best candidate function. 
You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

为了在 postgres 9.6 上获得这个结果,我需要改变什么?

谢谢。

这是我检查功能的结果:

nspname | proname | proargtypes 
------------+-----------+--------------------- 
pg_catalog | …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.4 array-agg postgresql-9.6

6
推荐指数
2
解决办法
3700
查看次数

SQL数组agg和联接

在我的Postgres数据库中,我有3个表。一个用于users一个用于comments和一个映射两种user_comment_map。表格的外观如下:

users
| id | name | age |
|----|------|-----|
| 1  | user | 20  |


comments
| id | mood  | subject | content         | created_at               |
|----|-------|---------|-----------------|--------------------------|
| 1  | happy | funny   | here is content | Tue Sep 27 2016 13:44:19 |
| 2  | silly | cool    | more content    | Tue Sep 27 2016 14:44:19 |

user_comment_map
| id | user_id | comment_id |
|----|---------|------------|
| 1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql join knex.js array-agg

5
推荐指数
1
解决办法
2379
查看次数

等效于Oracle XE 11.2中PostgreSQL的array_agg

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

ID   Category
1    Cat1
1    Cat2
2    Cat3
2    Cat4
Run Code Online (Sandbox Code Playgroud)

我想像这样用逗号分隔同一行中所有相关类别的唯一ID

ID   Categories
1    Cat1,Cat2
2    Cat3,Cat4
Run Code Online (Sandbox Code Playgroud)

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

sql oracle postgresql oracle11gr2 array-agg

5
推荐指数
1
解决办法
2023
查看次数

尝试 ORDER BY 时间戳时 ARRAY_AGG 被 GROUP BY 中断

我为我的问题准备了一个SQL Fiddle -

给出下表:

CREATE TABLE chat(
    gid integer,            /* game id */
    uid integer,            /* user id */
    created timestamptz,
    msg text
);
Run Code Online (Sandbox Code Playgroud)

填充以下测试数据:

INSERT INTO chat(gid, uid, created, msg) VALUES
    (10, 1, NOW() + interval '1 min', 'msg 1'),
    (10, 2, NOW() + interval '2 min', 'msg 2'),
    (10, 1, NOW() + interval '3 min', 'msg 3'),
    (10, 2, NOW() + interval '4 min', 'msg 4'),
    (10, 1, NOW() + interval '5 min', 'msg 5'),
    (10, 2, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql sql-order-by postgresql-json array-agg

5
推荐指数
1
解决办法
1319
查看次数

如何在 PostgreSQL 中通过 array_agg 依赖一个组

这是我的 SQL: SELECT t.uid, array_agg(t.place) FROM tour_tracking t WHERE (orderon::time BETWEEN '18:00:00' AND '20:00:00') GROUP BY t.uid;

原点结果:
|---------------|----------------------| | uid | place | |---------------|----------------------| | a01 | {hk, hk, jp} | |---------------|----------------------| | a02 | {jp, jp, jp, jp, uk} | |---------------|----------------------|

现在我想为每个分组的 uid 指望每个 DISTINCT 位置。希望的结果:

|---------------|--------------------------------------| | uid | place | |---------------|--------------------------------------| | a01 | something like this: {hk,2, jp,1} | |---------------|--------------------------------------| | a02 | {jp:4, uk:1} | |---------------|--------------------------------------|
我尝试组合一些count()sql 查询但不起作用..,如何进行正确的查询?

PostgreSQL 版本:10.3

sql postgresql group-by count array-agg

3
推荐指数
1
解决办法
6558
查看次数

Postgres GROUP BY 数组列

我有一份学生和家长名单,想使用学生证将他们分组为家庭。拥有共同学生 ID 的家长可以被视为一个家庭,拥有共同家长 ID 的学生也可以被视为一个家庭。这是一个示例表:

 p_id | parent_name | s_id | student_name |
------------------------------------------|
 1    | John Doe    | 100 |  Mike Doe     |
 3    | Jane Doe    | 100 |  Mike Doe     |
 3    | Jane Doe    | 105 |  Lisa Doe     |
 5    | Will Willy  | 108 |  William Son  |
Run Code Online (Sandbox Code Playgroud)

我想最终得到这样的结果:

     parents       |       students         |
-------------------|------------------------|
John Doe, Jane Doe |  Mike Doe, Lisa Doe    |
Will Willy         |  William Son           |
Run Code Online (Sandbox Code Playgroud)

为了实现这一目标,我目前正在使用:

SELECT array_agg(parents) AS …
Run Code Online (Sandbox Code Playgroud)

postgresql group-by array-agg

3
推荐指数
1
解决办法
2125
查看次数