【发布时间】:2020-04-24 22:43:52
【问题描述】:
到目前为止,我已经创建了一个可以给我以下结果的查询:
+------------+----------+-------------+-------+
| date | category | subcategory | count |
+------------+----------+-------------+-------+
| 2020-04-23 | One | First | 1 |
| 2020-04-23 | Two | Second | 1 |
| 2020-04-23 | Two | First | 3 |
| 2020-04-23 | Three | Third | 3 |
| 2020-04-23 | Three | Second | 1 |
| 2020-04-23 | Four | Second | 2 |
| 2020-04-23 | Five | Third | 3 |
| 2020-04-23 | Five | Second | 1 |
| 2020-04-23 | Five | First | 1 |
| 2020-04-23 | Six | Third | 1 |
| 2020-04-23 | Six | Second | 2 |
+------------+----------+-------------+-------+
我想把它变成以下,但我想不通:
+------------+----------+-------+--------+-------+
| date | category | First | Second | Third |
+------------+----------+-------+--------+-------+
| 2020-04-23 | One | 1 | 0 | 0 |
| 2020-04-23 | Two | 2 | 3 | 0 |
| 2020-04-23 | Three | 0 | 1 | 3 |
| 2020-04-23 | Five | 1 | 2 | 3 |
| 2020-04-23 | Six | 0 | 2 | 1 |
+------------+----------+-------+--------+-------+
我尝试了以下方法,但它looks like you have to return a row, column, and value when using crosstab 所以它不起作用:
SELECT *
FROM crosstab(
$$
SELECT date, category, subcategory, count(*)
-- ...
GROUP BY 1, 2, 3
$$
)
AS ct(date date, category text, First int, Second int, Third int);
有没有办法在使用交叉表时为行指示器使用多个值,还是我必须找到其他方法?
【问题讨论】:
标签: postgresql crosstab