我具有以下带有示例数据的postgres数据库结构
id | impressions | position
=============================
1 | 123 | 5.15
2 | 456 | 10.12
3 | 789 | 0.15
我需要做的是在一个结果行中获得所有展示次数和按比例计算的(展示次数*排名)/展示次数的总和。我不能使用AVG(position)
,因为每一行的印象必须作为权重才能获得足够的结果。
我可以轻松地通过获取整个结果集并对其进行迭代来做到这一点,但是在我的特殊情况下,这无法完成。
=================================
期望的输出是
array (
[0] => sum(impressions) = (123 + 456 + 789) = 1368
[1] => position = (123 * 5.15 + 456 * 10.12 + 789 * 0.15) / (123 + 456 + 789) = 3.922
)
答案 0 :(得分:0)
预期输出是多少?如果您想在查询的输出中包含其他列,可以对SUM
列进行impressions
,然后创建一个COMPUTED
列以按比例分配费用计算(如果我了解您的需求)
答案 1 :(得分:0)
只需执行您描述的内容即可
select sum(impressions * position) / sum(impressions)
from t;