我收到了一条SQL声明:
Select
ID, GroupID, Profit
From table
我现在想要添加第四列百分比的团体利润。 因此,查询应该将相同组ID的所有利润相加,然后将该数字除以唯一ID的利润。
有办法做到这一点吗?常规求和函数似乎不起作用。
由于
答案 0 :(得分:3)
select t1.ID,
t1. GroupID,
(t1.Profit * 1.0) / t2.grp_profit as percentage_profit
from table t1
inner join
(
select GroupID, sum(Profit) as grp_profit
from table
group by GroupID
) t2 on t1.groupid = t2.groupid
答案 1 :(得分:2)
窗口功能的另一个选项
select ID, GroupID, Profit * 1. / SUM(profit) OVER(PARTITION BY GroupID)
from t1
答案 2 :(得分:0)
使用标量子查询的替代解决方案如下:
select t1.ID, t1.GroupID, (select sum(t2.Profit) * 1.0 / t1.Profit
from table t2
where t2.GroupID = t1.GroupID) as percentage_profit
from table t1;
答案 3 :(得分:0)
提供替代答案,尽管效率较低,但是使用标量子查询。
SELECT ID, GroupId, Profit, (Profit/(SELECT sum(Profit)
FROM my_table
WHERE GroupId= mt.GroupId))*100 as pct
FROM my_table as mt
从它的阅读方式来看,我不确定你是否想要“团体利润的百分比”,或者你或者想要group_profit /个人利润
这就是听起来的方式“因此查询应该将相同组ID的所有利润相加,然后将该数字除以唯一ID的利润”
无论哪种方式只需切换你想要的除数!
此外,如果您使用Postgresql
> = 8.4,则可以使用窗口功能。
SELECT ID, GroupId, Profit, (Profit/ (sum(Profit) OVER(partition by GroupId)))*100 as pct
FROM core_dev.my_table as mt