按组划分的 SQL 佩森特斯



我在下面有查询和结果。

select count(age) countage, age
from table2
group by age

和结果

countage     age
2            1
4            2
4            3
1            4
2            5
8            6
4            7
8            8
1            9
2           10

我想有2个年龄组。第一组 1 到 5 和第二组 6 到 10 我喜欢让总组 1 和组 2 按每个计数年龄划分以获得百分比 例如:组 1(1 至 5 岁(和组 2(6 至 10 岁(的总数 = 13 和组 2(6 至 10 岁(= 23 年龄 1 计数 = 2 和 2/13 * 100 =



15%
年龄 2 计数 = 4 和除法 4/13 * 100 = 30%,
依此类推第 1 组。
组 2 执行与组 1
相同的计算 我的查询但效果不佳

WITH t1 AS 
(SELECT Age, Count(*) AS n 
FROM table2
GROUP BY Age)
SELECT Age, n, 
(0.0+n)/(COUNT(*) OVER (PARTITION BY Age)) 
FROM t1;

需要帮助。谢谢

如果我理解正确,您需要:

select (case when age <= 5 then 'group1' else 'group2' end) as age_group,
count(*),
count(*) * 1.0 / sum(count(*)) over () as ratio_in_group
from table2
group by (case when age <= 5 then 'group1' else 'group2' end);

或者,如果你只是想按年龄计算,你可以用条件窗口函数做类似的事情:

select age, count(*) as cnt,
count(*) * 1.0 / sum(count(*)) over (partition by case when age < 5 then 'group1' else 'group2' end) as ratio_in_group
from table2
group by age;

最新更新