Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
oracle中的sql按列分组查找比率_Sql_Oracle_Group By - Fatal编程技术网

oracle中的sql按列分组查找比率

oracle中的sql按列分组查找比率,sql,oracle,group-by,Sql,Oracle,Group By,有人能帮我在oracle中使用sql查找以下内容吗 Input in oracle TableX -- ColumnA |ColumnB 1 |20 1 |10 1 |30 2 |10 2 |30 3 |20 -- Desired result ColumnA |ColumnB |Ratio 1 |20 |0.333333333 1 |10 |0.16666

有人能帮我在oracle中使用sql查找以下内容吗

Input in oracle TableX --

ColumnA |ColumnB      
1      |20  
1      |10  
1      |30  
2      |10  
2      |30  
3      |20  

-- Desired result 

ColumnA |ColumnB  |Ratio   
1    |20    |0.333333333  
1    |10    |0.166666667  
1    |30    |0.5  
2    |10    |0.25  
2    |30    |0.75  
3    |20    |1  

SELECT
    ColumnA,
    ColumnB,
    ColumnA/sum(ColumnB) group ColumnA by as Ratio 
FROM
    TableX
GROUP BY
    ColumnA
ORDER BY
    ColumnA
我搞不懂如何计算组内的百分比

+++++++++
说明:
试图通过分组ColumnA来获取比率
第一行结果是从列A中分组1,如20/(20+10+30)=0.333
从第10列(10+30)=0.25分为第2组
ColumnA的最后一行结果分组3类似于20/20=1

Hence the sum of 0.333333333+0.166666667+0.5 = 1  
sum of 0.25  + 0.75  = 1  
sum of 1+0 = 1

您可以使用
sum
窗口函数来执行此操作

SELECT
    ColumnA,
    ColumnB,
    ColumnB/(sum(ColumnB) over(partition by ColumnA)) as Ratio 
FROM
    TableX
ORDER BY
    ColumnA

您可以使用
sum
窗口函数来执行此操作

SELECT
    ColumnA,
    ColumnB,
    ColumnB/(sum(ColumnB) over(partition by ColumnA)) as Ratio 
FROM
    TableX
ORDER BY
    ColumnA

当存在的函数正好满足您的需要时,最好使用这些函数。在这种情况下,函数为
RATIO\u TO\u REPORT


当存在的函数正好满足您的需要时,最好使用这些函数。在这种情况下,函数为
RATIO\u TO\u REPORT


一个窗口函数是最干净的,并且得到了我的投票。不过,从另一个角度来看,您也可以使用子查询来计算组中每个列的总值。然后,将其加入到原始表中,并使用总和计算您的比率

WITH SUM_TABLE AS (SELECT COLUMNA, SUM(COLUMNB) AS COLSUM FROM TABLEX GROUP BY COLUMNA)
SELECT t1.COLUMNA, t1.COLUMNB, t1.COLUMNB/st.COLSUM AS RATIO
FROM TABLEX t1 LEFT JOIN SUM_TABLE st ON st.COLUMNA = t1.COLUMNA

一个窗口函数是最干净的,并且得到了我的投票。不过,从另一个角度来看,您也可以使用子查询来计算组中每个列的总值。然后,将其加入到原始表中,并使用总和计算您的比率

WITH SUM_TABLE AS (SELECT COLUMNA, SUM(COLUMNB) AS COLSUM FROM TABLEX GROUP BY COLUMNA)
SELECT t1.COLUMNA, t1.COLUMNB, t1.COLUMNB/st.COLSUM AS RATIO
FROM TABLEX t1 LEFT JOIN SUM_TABLE st ON st.COLUMNA = t1.COLUMNA

修改了选择列A、列B、列B/sum(ColumnB)按表中的as比率分组按列排序修改了选择列A、列B、列B/sum(ColumnB)按表中的as比率分组按列排序按列排序