我正在尝试一个sql查询(在oracle中)以x列的第一个字符对数据集进行分组,并获取行的总数和百分比。为此,我使用下面的代码。
SELECT
V1,
COUNT(*) as "Count",
to_char(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 'fm990.00')|| '%' AS "Percentage"
FROM
(
SELECT
CASE
WHEN substr(x, 0, 1) BETWEEN 'A' AND 'C' THEN
'A'
WHEN substr(x, 0, 1) BETWEEN 'J' AND 'R' THEN
'B'
WHEN substr(x, 0, 1) BETWEEN 'S' AND 'Z' THEN
'C'
WHEN substr(x, 0, 1) BETWEEN '1' AND '5' THEN
'D'
WHEN substr(x, 0, 1) BETWEEN '6' AND '7' THEN
'E'
WHEN substr(x, 0, 1) BETWEEN '8' AND '9' THEN
'F'
ELSE
'Unknown'
END AS V1
FROM
table1
)
group by
V1
order by "Count", V1;
输出:
V1 Count Percentage
A 1 0.47%
B 1 0.47%
C 54 25.59%
D 66 31.28%
E 89 42.18%
现在我还想得到count和percentage列的总数,如下所示。
V1 Count Percentage
A 1 0.47%
B 1 0.47%
C 54 25.59%
D 66 31.28%
E 89 42.18%
Total 211 99.99%
4条答案
按热度按时间sirbozc51#
请使用下面的查询,
3z6pesqy2#
只是
union all
总金额的查询这将添加另一行的总计数(也总是100%)。
yks3o0rb3#
我建议在子查询中计算总数,然后使用
GROUPING SETS
:编辑:
根据你的评论,你陷入了困境
union all
方法:nnt7mjpx4#
你可以用
ROLLUP
具体如下: