相关疑难解决方法(0)

LATERAL和PostgreSQL中的子查询有什么区别?

由于Postgres能够进行LATERAL连接,我一直在阅读它,因为我目前为我的团队执行复杂的数据转储,其中包含大量低效的子查询,这使得整个查询需要四分钟或更长时间.

我知道LATERAL联接可能能够帮助我,但即使在阅读了像Heap Analytics 这样的文章之后,我仍然没有完全遵循.

LATERAL加入的用例是什么?LATERAL连接和子查询之间有什么区别?

sql postgresql subquery lateral-join

119
推荐指数
5
解决办法
7万
查看次数

带有元素编号的PostgreSQL unnest()

当我有一个具有分隔值的列时,我可以使用该unnest()函数:

myTable
id | elements
---+------------
1  |ab,cd,efg,hi
2  |jk,lm,no,pq
3  |rstuv,wxyz

select id, unnest(string_to_array(elements, ',')) AS elem
from myTable

id | elem
---+-----
1  | ab
1  | cd
1  | efg
1  | hi
2  | jk
...
Run Code Online (Sandbox Code Playgroud)

我如何包含元素编号?即:

id | elem | nr
---+------+---
1  | ab   | 1
1  | cd   | 2
1  | efg  | 3
1  | hi   | 4
2  | jk   | 1
...
Run Code Online (Sandbox Code Playgroud)

我想要源字符串中每个元素的原始位置.我试着窗口函数(row_number(), …

sql arrays postgresql window-functions set-returning-functions

69
推荐指数
3
解决办法
8万
查看次数

在PostgreSQL中是否有类似两个数组的zip()函数?

我在PostgreSQL中有两个相同长度的数组值:

{a,b,c} 和 {d,e,f}

我想把它们结合起来

{{a,d},{b,e},{c,f}}

有没有办法做到这一点?

sql arrays postgresql

21
推荐指数
2
解决办法
7298
查看次数

select子句中多个set-returns函数的预期行为是什么?

我试图通过两个set-returns函数得到一个"交叉连接",但在某些情况下我没有得到"交叉连接",请参阅示例

行为1:当设置的长度相同时,它会逐个匹配每个集合中的项目

postgres=# SELECT generate_series(1,3), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
(3 rows)

行为2:当设置的长度不同时,它会"交叉连接"这些集合

postgres=# SELECT generate_series(1,2), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               1 |               6
               1 |               7
               2 |               5
               2 |               6
               2 |               7
(6 rows)

我想我在这里不了解一些事情,有人可以解释一下这种行为吗?

编辑:另一个例子,比以前更奇怪

postgres=# SELECT generate_series(1,2) x, generate_series(1,4) y order by x,y;
 x | y 
---+---
 1 | 1
 1 | 3 …

sql postgresql cross-join set-returning-functions

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

如何按位置对 postrgresql 数组的元素求和?

假设我有一个查询返回生产作业表,并且在一列中我有过去 7 天每个作业的输出数组:

 sku | job | outputs
-----------------------------
 A1  | 123 | {2,4,6,5,5,5,5}
 A1  | 135 | {0,0,0,3,5,7,9}
 B3  | 109 | {3,2,3,2,3,2,3}
 C5  | 144 | {5,5,5,5,5,5,5}
Run Code Online (Sandbox Code Playgroud)

如何编写一个按 SKU(产品编号)分组并按位置求和 7 天输出的查询?在本例中,您可以看到产品 A1 有两个生产作业:这些作业应合并到结果的一行中:

 sku | outputs
--------------------------
 A1  | {2,4,6,8,10,12,14}
 B3  | {3,2,3,2,3,2,3}
 C5  | {5,5,5,5,5,5,5}
Run Code Online (Sandbox Code Playgroud)

arrays postgresql aggregate-functions aggregation

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