gpt4 book ai didi

postgresql - 条件 ROW NUMBER 或 COMBINE GROUP BY

转载 作者:行者123 更新时间:2023-11-29 13:12:48 25 4
gpt4 key购买 nike

我需要对两个不同的列进行 GROUP BY 并合并。此外,如果具有不同 group_idsize 与另一个 size 匹配,那么我想包含这些行的 ALL对于那个 group_id

例如,由于 55 在 group_id 10 和 group_id 20 中,我想包含 group_id 20 中的所有结果(即 55、88、55、88)。

p_id  | group_id | size | the_date    
------+----------+-----------+--------
1 | 10 | 55 | 2012-10-24
1 | 10 | 54 | 2014-08-09
1 | 20 | 55 | 2013-05-20
1 | 20 | 88 | 2014-05-20
1 | 20 | 55 | 2015-05-20
1 | 30 | 33 | 2014-05-20
1 | 30 | 55 | 2015-05-20
1 | 30 | 33 | 2015-05-20
1 | 40 | 99 | 2015-05-20

我看过一些 other questions在堆栈上并尝试使用 row_numberfirst_value 但没有任何效果。下面是我想要的结果。

p_id  | group_id | size |       group_id_arr         |         size_arr            |  date_arr    
------+----------+------+----------------------------+-----------------------------+-----------
1 | 10 | 55 | {10,20,30,20,10,30,30,20} | {55,55,33,88,55,55,33,55} | {2012-10-24,2013-05-20,2014-05-20,2014-05-20,2014-08-09,2015-05-20,2015-05-20,2015-05-20}
1 | 40 | 99 | {40} | {99} | {2015-05-20}

这是我的 DBFiddle我正在努力实现以下目标,以便我可以汇总。

 rn   |   p_id   | group_id | size | the_date    
------+----------+----------+------+-----------
1 | 1 | 10 | 55 | 2012-10-24
2 | 1 | 20 | 55 | 2013-05-20
3 | 1 | 30 | 33 | 2014-05-20
4 | 1 | 20 | 88 | 2014-05-20
5 | 1 | 10 | 54 | 2014-08-09
6 | 1 | 30 | 55 | 2015-05-20
7 | 1 | 30 | 33 | 2015-05-20
8 | 1 | 20 | 55 | 2015-05-20
1 | 1 | 40 | 99 | 2015-05-20

如果您有任何问题,请告诉我。我对所有方法都持开放态度,谢谢。

最佳答案

我不太确定最终数组中的顺序,但这应该是您可以修复的细节:

demo: db<>fiddle

WITH sizes as (
SELECT group_id, the_date, array_agg(size) sizes
FROM base_table
GROUP BY group_id, the_date
)
SELECT
a_group_id,
array_agg(b_group_id order by the_date),
array_agg(size order by the_date) as sizes,
array_agg(the_date order by the_date)
FROM (
SELECT
a.group_id as a_group_id,
b.group_id as b_group_id,
unnest(b.sizes) size, b.the_date
FROM sizes a
INNER JOIN sizes b
ON a.sizes && b.sizes
) s
GROUP BY a_group_id
  1. 汇总每个 group_id 的大小
  2. 将聚合与自身交叉连接,其中一个大小的数组至少有一个成员与另一个成员。这为您提供了一张您预期和描述的表格。
  3. group_id 分组。

关于postgresql - 条件 ROW NUMBER 或 COMBINE GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com