使用 SQL 计算组大小的比率

Dro*_*ror 5 sql vertica

考虑一个简单的 group by 查询:

select foo, count(*)
    from mytable where bar=10 
group by foo
Run Code Online (Sandbox Code Playgroud)

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

foo | count
----+------
a   | 100
b   | 200
c   | 300
Run Code Online (Sandbox Code Playgroud)

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

foo | count | ratio
----+-------+-------
a   | 200   | 18.2
b   | 300   | 27.3
c   | 600   | 54.5
Run Code Online (Sandbox Code Playgroud)

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

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

Gor*_*off 6

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

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

这并不能保证四舍五入时该值加起来正好是 100%。这是一个更棘手的问题,通常在应用程序层处理得更好。这确实会使用浮点数产生“正确”的答案。

  • 这完全按照预期工作。@mauro 你想解释一下你在这里看到的错误吗? (2认同)