oracle中的sql按列分组查找比率
有人能帮我在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
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比率分组按列排序按列排序