按行分组

时间:2016-02-04 17:25:24

标签: sql postgresql

我遇到查询问题,已经坚持了几天。它不是太复杂,但在尝试和失败之后,我决定将它发布在这里。

我有一个包含4个字段的表(id | period | type | amount)。 period包含年份中的最后两位数字,而月份中的两位数字(如1512,1601和type的值)是1,2或3.我想要做的是对按amountperiod分组的type字段求和,但问题是我尝试在一行中对type进行分组。通过数据和期望输出的示例,这将更容易显示。

数据:

+-------+----------+-----------+--------+
| id    | period   | type      | amount |
+-------+----------+-----------+--------+
| 1     |  1511    | 1         | 15     |
| 2     |  1511    | 1         | 20     |
| 3     |  1511    | 2         | 15     |
| 4     |  1511    | 3         | 30     |
| 5     |  1512    | 1         | 20     |
| 6     |  1512    | 1         | 20     |
| 7     |  1512    | 2         | 35     |
| 8     |  1512    | 2         | 40     |
| 9     |  1512    | 2         | 45     |
| 10    |  1512    | 2         | 45     |
| 11    |  1512    | 3         | 15     |
| 12    |  1601    | 1         | 20     |
| 13    |  1601    | 2         | 25     |
| 14    |  1601    | 2         | 40     |
| 15    |  1601    | 3         | 60     |
| 16    |  1601    | 3         | 65     |
+-------+----------+-----------+--------+

欲望输出:

+---------+--------+--------+--------+
| period  | type1  | type2  | type3  |
+---------+--------+--------+--------+
| 1511    | 35     | 15     | 30     |
| 1512    | 40     | 165    | 15     |
| 1601    | 20     | 65     | 125    |
+---------+--------+--------+--------+

到目前为止我所拥有的是这个查询,它显示type的一行,而不是我想要的一行:

SELECT period, type, sum(amount) FROM payments GROUP BY period, type;

0 个答案:

没有答案