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上得到了不同的结果。我要试试别的。非常感谢。