我遇到查询问题,已经坚持了几天。它不是太复杂,但在尝试和失败之后,我决定将它发布在这里。
我有一个包含4个字段的表(id | period | type | amount
)。 period
包含年份中的最后两位数字,而月份中的两位数字(如1512,1601和type
的值)是1,2或3.我想要做的是对按amount
和period
分组的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;