繁体   English   中英

PostgreSQL:如何从3个不同的查询中获取1个值

[英]Postgresql: How can I get 1 value from 3 different queries

早上好! 让我从头开始。 这是我的查询:

--Query 1:
select proceeding_id,operator_id,format_code,count (format_code) as E1
from legacy_formats where format_code in ('1.1.2') group by 1,2,3
UNION
--Query 2
select proceeding_id,operator_id,format_code,count (format_code) as E2
from legacy_formats where format_code in ('1.1.3') group by 1,2,3
UNION
--Query 3
select proceeding_id,operator_id,format_code,count (format_code) as E3
from legacy_formats where format_code in ('1.1.4') group by 1,2,3

这3个查询给了我4列结果:

结果

E1 =第一个结果。 E =第二个结果。 E3 =第三结果。 我需要获取以下信息:

E1 / ( E1 + E2 + E3)

因此,我需要在查询末尾添加另一个查询以获得此结果。

提前致谢

这是你想要的?

create table tt (
    identifier varchar(20),
    e integer
 );

insert into tt values ('E1',5);
insert into tt values ('E2',6);
insert into tt values ('E3',3);

select (
    (select e from tt where identifier='E1')::float
       /
    (select sum(e) from tt where identifier in ('E1','E2','E3'))
) as ratio;

ratio
-----
0.35714285714285715

对于您的问题的很多方面,我还是不太清楚,但是假设myqueryresults是您查询的结果,也许这样的事情就可以了。 我还假设一致的dato id以某种方式与该数据的分组方式相关。

如果我的任何假设是错误的,请随时澄清。

with myqueryresults as (
  <whatever you did to get that output>
)
select
  format_code, indentificator, e, e / sum (e) over (partition by dato_id)
from myqueryresults

在上面的示例输出中,这将为您提供:

1.1.2    E1   5   0.35714285714285714286
1.1.3    E2   6   0.42857142857142857143
1.1.4    E3   3   0.21428571428571428571

希望您能得到答案,也可以尝试一下

SELECT (SUM(CASE WHEN identificador = 'E1' THEN e END)::numeric(5,2)/ 
SUM(CASE WHEN identificador IN ('E1','E2','E3') THEN e END))::numeric(5,4) result
FROM resultQuery

它给你想要的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM