Sql 按和划分

Sql 按和划分,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我和车主、汽车、价格有一张桌子。在单个查询中(使用over和partition by),我需要得到一列,其中包含车主所有汽车的汽车价值份额(一个车主可以有多辆汽车)和所有汽车的汽车价值份额。我做了这样的事 price::十进制/总和(price)超过(按所有者.id划分), price::十进制/总和(价格)超过(除以总和(价格)) 第一个是完美的工作,但我不知道如何做第二个。求和不起作用,因为我们必须向列指出,但在这种情况下,如何得到所有汽车的求和值 例如,我只有3辆车,每辆10美元。有两个车

我和车主、汽车、价格有一张桌子。在单个查询中(使用over和partition by),我需要得到一列,其中包含车主所有汽车的汽车价值份额(一个车主可以有多辆汽车)和所有汽车的汽车价值份额。我做了这样的事

price::十进制/总和(price)超过(按所有者.id划分),

price::十进制/总和(价格)超过(除以总和(价格))

第一个是完美的工作,但我不知道如何做第二个。求和不起作用,因为我们必须向列指出,但在这种情况下,如何得到所有汽车的求和值


例如,我只有3辆车,每辆10美元。有两个车主A和B。A有两辆车。所以我需要

  • A的第一辆车50%(A的车的价值)33%(所有车的价值)
  • A的第二辆车50%(A的车的价值)33%(所有车的价值)
  • B的第一辆车100%(B的车的价值)33%(所有车的价值)
我只是好奇,我可以不使用任何子查询,只使用Partition By

吗这是一种方法:

select 
round((price::decimal/sum(price) over (partition by id)),4) * 100 || ' %' as share_of_owner
, round((price::decimal/sum(price) over()), 4) * 100 || ' %' as share_of_cars
from mytable
group by id, cars, price

我使用了
四舍五入
,四舍五入为4位小数。你可以根据自己的需要改变

结果:


请向我们展示您开始时的一些数据以及您希望得到的结果?另外,请告诉我们整个查询。例如,我只有3辆车,每辆10美元。有两个车主A和B。A有两辆车。所以我需要得到“第一辆车50%(A的车)33%(全部)| | | |第二辆车50%(A的车)33%(全部)| | B第一辆车100%(B的车)33%(全部)我只是好奇我能不需要任何子查询,只需要使用分区BY就可以了请在你的问题中添加这个附加信息。您可以使用问题下的编辑按钮更新您的问题。另外,不要忘了添加适合您的代码,正如您所说:“第一个工作非常完美”,非常感谢:)就这么简单!