数据库查询中的按比例计算

时间:2018-06-20 09:53:03

标签: sql postgresql

我具有以下带有示例数据的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

)

2 个答案:

答案 0 :(得分:0)

预期输出是多少?如果您想在查询的输出中包含其他列,可以对SUM列进行impressions,然后创建一个COMPUTED列以按比例分配费用计算(如果我了解您的需求)

答案 1 :(得分:0)

只需执行您描述的内容即可

select sum(impressions * position) / sum(impressions)
from t;