Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表中的条件百分比列_Sql - Fatal编程技术网

SQL表中的条件百分比列

SQL表中的条件百分比列,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

我想添加一个列,显示分数的百分比值,其中每个记录的分数除以它所在类别的分数之和。因此,新列中的值应为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创建总和值,然后将其连接到主表。有更有效的方法吗?

使用窗口功能:

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等。