SQL查询 - 子样本的百分比

时间:2013-07-12 12:40:44

标签: sql sum

我收到了一条SQL声明:

Select
ID, GroupID, Profit
From table

我现在想要添加第四列百分比的团体利润。 因此,查询应该将相同组ID的所有利润相加,然后将该数字除以唯一ID的利润。

有办法做到这一点吗?常规求和函数似乎不起作用。

由于

4 个答案:

答案 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