使用SQL计算组大小的比率

时间:2016-08-23 06:18:50

标签: sql vertica

按查询考虑一个简单的组:

select foo, count(*)
    from mytable where bar=10 
group by foo

这将返回一个具有以下格式的表:

foo | count
----+------
a   | 100
b   | 200
c   | 300

我的目标是使用单个查询获取下表:

foo | count | ratio
----+-------+-------
a   | 200   | 18.2
b   | 300   | 27.3
c   | 600   | 54.5

在实践中,我有更多可能的foo值,因此here中的答案没有帮助。此外,并不是将比率四舍五入并乘以100。

这样做的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

听起来你想要这样的东西:

select foo, count(*),
       count(*) * 100.0 / sum(count(*)) over () as ratio
from mytable
where bar = 10 
group by foo;

这并不能保证在舍入时该值加起来恰好为100%。这是一个很棘手的问题,通常在应用层处理得更好。这确实产生了正确的"使用浮点数回答。

答案 1 :(得分:0)

这是一个拖拽自己数据的工作示例 - 您可以根据自己的需要进行修改:

    SQL>WITH mytable(
    ...>foo , counter
    ...>) AS (
    ...>          SELECT 'a',200
    ...>UNION ALL SELECT 'b',300
    ...>UNION ALL SELECT 'c',600
    ...>)
    ...>SELECT
    ...>  foo
    ...>, counter
    ...>, (counter * 100.0 / SUM(counter) OVER ())::NUMERIC(3,1) AS ratio
    ...>FROM mytable
    ...>;
    foo|counter             |ratio
    a  |                 200| 18.2
    b  |                 300| 27.3
    c  |                 600| 54.5
    select succeeded; 3 rows fetched

快乐的比赛...... marcothesane