在SQL

时间:2016-09-11 20:53:15

标签: sql aggregation

我想创建一个基于单个SQL语句的百分比频率表。所以,如果我有一张这样的男女表:

Name    Gender   
Allen    M
Jerry    M
Marsha   F
Alice    F

我想以此表结束:

Gender   Freq
M        .50
F        .50

我知道我可以统计和分组,但我怎样才能将分数除以分组总数?

2 个答案:

答案 0 :(得分:1)

大多数SQL方言都支持ANSI标准窗口函数。使用它们你可以做到:

select gender, count(*), count(*) / sum(count(*) * 1.0) over ()
from t
group by gender;

* 1.0只是因为某些数据库进行了整数的整数除法。

答案 1 :(得分:0)

尝试使用以下查询

SELECT gender,cast(count(1) OVER(Partition by GENDER order by GENDER)/(count(1) OVER( order by (select 1))*1.0) as numeric(4,2)) freq
FROM #temp
GROUP BY gender
ORDER BY Gender desc