【发布时间】:2017-05-13 19:53:30
【问题描述】:
[使用 postgres]
所以我的场景的背景是:
我正在尝试按用户活跃的年龄来获取平均费用 成本 = 40 33 岁的人中只有 2 人买过东西 我有 34 位 33 岁的活跃会员(无论他们是否付款与此计数无关) 考虑到这一点,每个年龄花费的钱 = 40 / 34 = 1.18 我现在得到的是 = 40 / 2 = 20 我知道它受到两个购买的用户的限制
那么我从哪里得到所有这些?
select date_part('year', age(birthday)) as age,
avg(cost)
from person
inner join payment on person.person_id = payment.person_id
inner join product on payment.product_id = product.product_id
where
date_part('year', age(birthday))= 33 and user_state = 'active'
group by age
不幸的是,当使用聚合函数时(在本例中为 avg())
似乎 avg() 受限于内部联接的结果(我尝试了左联接以保持对所有用户的访问,它似乎不起作用,因为我仍然得到了不希望的结果 20)。有没有办法避免这种情况?换句话说,我可以让 avg() 调用特定于我的 person 表,而不是连接的结果吗?
如果重要的话,这就是我检索总和的方式。
select sum(cost)
from person
inner join payment on person.person_id = payment.person_id
inner join product on payment.product_id = product.product_id
where
date_part('year', age(birthday))= 33
and
user_state = 'active'
= 40
显而易见的是计算我想要的人数,然后分别进行总和,但我试图避免从一个查询转到另一个查询。
【问题讨论】:
-
请编辑您的帖子以使用完整清晰的句子。我们如何解析你的第一句话?什么是“受两个用户约束”和“受内部连接结果约束”?您以非标准的方式使用“约束”来模糊地总结您没有解释的内容。与“特定于我的人员表”相同。 “从一个查询转到另一个查询”是什么意思?我们可以从正确的解决方案中猜出你应该写什么,但你没有表达出来。但清楚地表达自己是寻找解决方案的一部分。 PS 在嵌套连接中添加一列,以获取您在它之外需要的内容。
标签: postgresql inner-join aggregate-functions