gpt4 book ai didi

sql - 在 PostgreSQL 中将两个或多个不同的 SELECT 查询组合到具有不同条件的同一个表

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:50 24 4
gpt4 key购买 nike

我需要从同一个表中检索两个不同的结果,并将它们组合成一个结果集。我正在使用聚合函数生成一些数据的报告,并且每列都有不同的“where”条件。

select sum(price) 
as lucro_esperado
from tasks
where extract(month from enddate) = 12
AND extract(year from enddate) = 2019

select count(*) 
as tarefas_abertas
from tasks
where extract(month from date_added) = 12
AND extract(year from date_added) = 2019

由于我对这种情况感兴趣的是聚合函数结果,因此我无法使用 Join 语句(因为没有 ON 条件),并且 Union 语句会提示不同的数据类型,因为它试图错误地将两个聚合结果合并到单个列中。我可以通过其他方式实现此目的,而无需从 Node.js 端点两次查询数据库并手动组合它们吗?

最佳答案

只需将其写为一个查询即可:

select sum(price) as lucro_esperado, count(*) as tarefas_abertas
from tasks
where extract(month from enddate) = 12 and
extract(year from enddate) = 2019

我建议您将 where 子句更改为:

where enddate >= '2019-12-01' and
enddate < '2020-01-01'

这允许数据库在enddate上使用索引(如果可用)。此外,删除列上的函数调用有助于优化器。

编辑:

我明白了,两个日期参数是不同的。只需使用条件聚合:

select sum(case when enddate >= '2019-12-01' and enddate < '2020-01-01' then price end) as lucro_esperado,
sum(case when date_added >= '2019-12-01' and date_added < '2020-01-01' then 1 else 0 end) as tarefas_abertas
from tasks;

关于sql - 在 PostgreSQL 中将两个或多个不同的 SELECT 查询组合到具有不同条件的同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555514/

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