因此,我尝试创建一个查询,其中将子查询分组到数组中。
我不是Postgres方面的Maven,尤其不是查询中的数组,所以我正在努力学习更高级的东西。
我希望达到以下输出:
Date | Jobs
-----------------------------------------------------------------------------
21/11/2022 | {{TestJob1,1500},{TestJob2,1100},{TestJob3,500}}
20/11/2022 | {{TestJob1,1300},{TestJob2,100},{TestJob3,500}}
19/11/2022 | {{TestJob1,1400},{TestJob2,1900}}
18/11/2022 | {{TestJob1,1200},{TestJob2,1700},{TestJob3,800},{TestJob4,500}}
我已经开始尝试了,这就是我所取得的成就:
SELECT j."Start time"::date AS "Date",
(select array["Job name", count(*)::varchar] from amdw."Job runs" where "Start time"::date = j."Start time"::date group by "Job name") as "Jobs"
FROM amdw."Job runs" j
GROUP BY "Date"
ORDER BY "Date" DESC;
但使用此查询时,我得到以下错误:
SQL Error [42803]: ERROR: subquery uses ungrouped column "j.Start time" from outer query
Position: 135
有人知道如何解决这个查询问题,并得到我想要的输出吗?
将查询修改为@a_horse_with_no_name后,建议:
SELECT j."Start time"::date AS "Date",
["Job name", count(*)::varchar] as "Jobs"
FROM amdw."Job runs" j
GROUP BY "Date", "Job name"
ORDER BY "Date" DESC;
Date | Jobs
-----------------------------------------------------------------------------
21/11/2022 | {{TestJob1,1500}
21/11/2022 | {TestJob2,1100}
21/11/2022 | {TestJob3,500}}
20/11/2022 | {{TestJob1,1300}
20/11/2022 | {TestJob2,100}
20/11/2022 | {TestJob3,500}}
所以我现在需要找到一种方法,只显示日期一次,并在数组中创建第二个维度...
1条答案
按热度按时间hjzp0vay1#
您可以通过两个步骤来聚合此数组,首先创建一个临时表,按
Start time
对每个Job name
进行计数,然后使用ARRAY_AGG()聚合数组