Postgresql 对不同的列进行计数,并根据其他两列对其求平均值
我不知道该怎么说,请允许我解释一下。从这张桌子上Postgresql 对不同的列进行计数,并根据其他两列对其求平均值,postgresql,Postgresql,我不知道该怎么说,请允许我解释一下。从这张桌子上 CREATE TABLE test ( id int4 NULL, shot varchar NULL, layer varchar NULL ); INSERT INTO test (id,shot,layer) VALUES (1,'10','a') ,(1,'10','a') ,(1,'10','b') ,(1,'10','c') ,(1,'20','a') ,(2,'10','a') ,(2,'10','a')
CREATE TABLE test (
id int4 NULL,
shot varchar NULL,
layer varchar NULL
);
INSERT INTO test (id,shot,layer) VALUES
(1,'10','a')
,(1,'10','a')
,(1,'10','b')
,(1,'10','c')
,(1,'20','a')
,(2,'10','a')
,(2,'10','a')
,(2,'10','a')
,(2,'10','a')
,(2,'10','b')
,(2,'10','b')
,(2,'20','a');
如何查询每个快照的平均层并按ID显示它们
例如,id 1有2个快照,一个有3层,另一个有1层,因此平均每个快照有2层
id | average layer
____________________
1 | 2
2 | 1.5
Id 2有2个快照,平均每个快照1.5层
id | average layer
____________________
1 | 2
2 | 1.5
我认为您需要在子查询中计算每个层和id(如果我正确理解您的话)的不同快照数,然后在此基础上求平均值
select id, avg(layers_per_shot) as average
from (
select id, shot, count( distinct layer) as layers_per_shot
from test
group by id, shot ) Q
group by id
以及由此产生的结果:
谢谢你的来电。我曾单独尝试过子查询,但它似乎没有达到我想要的效果。结果只显示了3行,平均值看起来不正确。仅子查询是不正确的-子查询将为您提供id和快照列表,每个id和快照都有一个层。完整查询以获取平均值。将添加链接和结果-它会为您提供有趣的答案。我在Dbeaver上得到了不同的结果。我要试试别的。非常感谢。