首页 > 解决方案 > 有没有办法将一列除以列总数?

问题描述

我正在设置一个查询。

我有两列——一列是类别,另一列是数字。

我想通过总数来设置数字列,同时将不同的类别组合在一起

像这样的事情就是我的想法

我很确定如何使用“with”构造来做到这一点,但是有没有办法在同一张表中做到这一点?

标签: presto

解决方案


您可以为此目的使用窗口函数:

WITH data (category, number) AS (
    VALUES
        ('A', 1),
        ('A', 2),
        ('A', 3),
        ('B', 4),
        ('B', 5),
        ('B', 6)
)
SELECT category, number * 1e0 / sum(number) OVER (PARTITION BY category)
FROM data

产生:

 category |        _col1
----------+---------------------
 A        | 0.16666666666666666
 A        |  0.3333333333333333
 A        |                 0.5
 B        | 0.26666666666666666
 B        |  0.3333333333333333
 B        |                 0.4
(6 rows)

推荐阅读