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