我是一名SQL新手,正在尝试在Postgres中进行交叉表。我本来会用Excel做这个,但我的数据库有大约350万行数据,20,000个不同的代码值,7个不同的分类,并且变量值从1到100不等。有些代码可能只属于其中几个分类。
由于Excel无法处理如此多的行数据,所以我选择使用SQL。
我的数据格式如下:
由于Excel无法处理如此多的行数据,所以我选择使用SQL。
我的数据格式如下:
code | cat | value |
--------------------------------
abc123 | 1 | 4 |
abc234 | 2 | 6 |
abc345 | 1 | 1 |
abc123 | 3 | 2 |
abc123 | 6 | 12 |
在一个Postgres表中,存储了以代码和分类为文本,以整数为值的数据。
我想对代码和分类执行交叉表,以显示值的总和。我希望返回结果中显示为零而不是“null”,但如果使用“null”更简单,则也可以。
因此,我想要的输出结果是:
code | 'cat=0' | 'cat=1' | 'cat=2' | 'cat=3' | 'cat=4' | 'cat=5' | 'cat=6'|
abc123 | 25 | 0 | 3 | 500 | 250 | 42 | 0 |
abc234 | 0 | 100 | 0 | 10 | 5 | 0 | 25 |
abc345 | 1000 | 0 | 0 | 0 | 0 | 0 | 0 |
我在Postgres的帮助文件和其他论坛上搜索过了;最接近的是SO问题PostgreSQL Crosstab Query,但我无法弄清如何对第三列的值求和。
如有任何帮助,将不胜感激。