按查询考虑一个简单的组:
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。
这样做的最佳做法是什么?
答案 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