根据另外两列计算它们并对它们进行平均

时间:2018-03-06 10:09:22

标签: 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')
,(2,'10','a')
,(2,'10','a')
,(2,'10','b')
,(2,'10','b')
,(2,'20','a');

如何查询每个镜头的平均图层并按ID显示?

例如,id 1有2个镜头,一个有3个层,另一个有1个层,所以每个镜头的平均值是2层。

Id 2有两次投篮,平均每次投篮1.5次。

id  |  average layer
____________________
1   |  2
2   |  1.5

1 个答案:

答案 0 :(得分:1)

我认为你需要计算每个图层的不同镜头数和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

Working fiddle及其结果:

enter image description here