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



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

预期的输出是多少?如果要让另一列包含查询的输出,可以对impressions列执行SUM,然后创建COMPUTED列以进行按比例计算。(如果我了解您的需求(

只需实现您所描述的内容:

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

最新更新