SQL PARTITION的倍数和

时间:2018-07-30 22:15:10

标签: sql postgresql

我有下面的postgreSql表stock,下面的结构是

| column |  pk |
+--------+-----+
| date   | yes |
| id     | yes |
| type   | yes |
| qty    |     |
| fee    |     |

表看起来像这样

|    date    |  id | type | qty  | fee |
+------------+-----+------+------+------+
| 2015-01-01 | 001 | CB04 |  500 |    2 |
| 2015-01-01 | 002 | CB04 | 1500 |    3 |
| 2015-01-01 | 003 | CB04 |  500 |    1 |
| 2015-01-01 | 004 | CB04 |  100 |    5 |
| 2015-01-01 | 001 | CB02 |  800 |    6 |
| 2015-01-02 | 002 | CB03 | 3100 |    1 |
|            |     |      |      |      |

我想创建一个视图或查询,以便结果看起来像这样。

|    date    | type | t_qty | total_weighted_fee |
+------------+------+-------+--------------------+
| 2015-01-01 | CB04 |  2600 |                2.5 |
| 2015-01-01 | CB03 |  3100 |                  1 |
|            |      |       |                    |

这是我做什么

http://sqlfiddle.com/#!17/39fb8a/18

但这不是我想要的输出。

子查询表如下所示:

% of total Qty = qty / t_qty

weighted fee = fee * % of total Qty

|    date    |  id | type | qty  | fee | t_qty | % of total Qty | weighted fee |
+------------+-----+------+------+-----+-------+----------------+--------------+
| 2015-01-01 | 001 | CB04 |  500 |   2 |  2600 |           0.19 |         0.38 |
| 2015-01-01 | 002 | CB04 | 1500 |   3 |  2600 |           0.58 |         1.73 |
| 2015-01-01 | 003 | CB04 |  500 |   1 |  2600 |           0.19 |        0.192 |
| 2015-01-01 | 004 | CB04 |  100 |   5 |  2600 |           0.04 |        0.192 |
| 2015-01-01 | 002 | CB03 | 3100 |   1 |  3100 |              1 |            1 |
|            |     |      |      |     |       |                |              |

1 个答案:

答案 0 :(得分:0)

您可以使用聚合。 。 。我认为您离我们并不遥远:

select date, type, sum(qty),
       sum(fee * qty * 1.0) / nullif(sum(qty), 0)
from t
group by date, type;