SQL表中的条件百分比列
我想添加一个列,显示分数的百分比值,其中每个记录的分数除以它所在类别的分数之和。因此,新列中的值应为0.6、0.4、0.3和0.7SQL表中的条件百分比列,sql,Sql,我想添加一个列,显示分数的百分比值,其中每个记录的分数除以它所在类别的分数之和。因此,新列中的值应为0.6、0.4、0.3和0.7 Id Category Score 1 foo 6 2 foo 4 3 bar 30 4 bar 70 我认为最好的方法是创建一个临时表,使用GROUPBY为Score创建总和值,然后将其连接到主表。有更有效的方法吗?使用窗口功能: sele
Id Category Score
1 foo 6
2 foo 4
3 bar 30
4 bar 70
我认为最好的方法是创建一个临时表,使用GROUPBY为Score创建总和值,然后将其连接到主表。有更有效的方法吗?使用窗口功能:
select t.*,
score * 1.0 / sum(score) over (partition by category) as newcol
from t;
*1.0
是因为某些数据库进行整数除法。使用窗口函数:
select t.*,
score * 1.0 / sum(score) over (partition by category) as newcol
from t;
*1.0
是因为有些数据库进行整数除法。您也可以在不创建临时表的情况下进行除法
SELECT A.* , CAST(Score*1.0/TotalScore AS DECIMAL(6,2))
FROM [table1] A
JOIN (
SELECT Category
,SUM(Score) TotalScore
FROM [table1]
GROUP BY Category
) B
ON A.Category = B.Category
也可以在不创建临时表的情况下执行此操作
SELECT A.* , CAST(Score*1.0/TotalScore AS DECIMAL(6,2))
FROM [table1] A
JOIN (
SELECT Category
,SUM(Score) TotalScore
FROM [table1]
GROUP BY Category
) B
ON A.Category = B.Category
请提供您正在使用的数据库管理系统。如MySql、Oracle、SQL Server等。请提供您正在使用的dbms。比如MySql、Oracle、SQL Server等。