假设我们有以下表格:
Customer | Product | Quantity |
---|---|---|
A | P1 | 10 |
A | P2 | 5 |
B | P1 | 8 |
B | P2 | 2 |
C | P1 | 12 |
C | P2 | 18 |
我们想要计算每个顾客买了哪些产品,并将每个产品占所有产品的百分比列出来。
我们可以使用窗口函数以及聚合函数来实现:
SELECT Customer, Product, Quantity, 100.0 * Quantity / SUM(Quantity) OVER (PARTITION BY Customer) AS Percentage FROM my_table ORDER BY Customer, Product;
这将返回以下结果:
Customer | Product | Quantity | Percentage |
---|---|---|---|
A | P1 | 10 | 66.6667 |
A | P2 | 5 | 33.3333 |
B | P1 | 8 | 80.0 |
B | P2 | 2 | 20.0 |
C | P1 | 12 | 40.0 |
C | P2 | 18 | 60.0 |
以上代码中,我们使用了窗口函数SUM来计算每个客户购买的产品数量的总和。这个SUM函数配合OVER函数的PARTITION BY子句,将会让计算仅仅只应用在具有相同Customer值的行上。最后,我们将我们用100.0相乘,以得到百分比(decimal类型-->100分之一换成百分比形式),并将它作为最终结果返回给用户。
上一篇:按列进行分区的递归CTE