【发布时间】:2012-01-15 14:41:01
【问题描述】:
我是 SQL 新手,正在尝试在 Postgres 中做交叉表。我会在 Excel 中完成,但我有一个包含大约 350 万行的数据库、20,000 个不同的代码值、cat 中的 7 个类别以及从 1 到 100 的变量值。代码可能只有 7 个类别中的几个。
Excel不能处理行数,所以是SQL。
我的数据格式为
code | cat | value |
--------------------------------
abc123 | 1 | 4 |
abc234 | 2 | 6 |
abc345 | 1 | 1 |
abc123 | 3 | 2 |
abc123 | 6 | 12 |
code 和 cat 作为文本,值作为整数存储在 Postgres 表中。
我想对 code 和 cat 执行交叉表,并带有值的总和。我希望它在返回中显示零而不是“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 question PostgreSQL Crosstab Query 但我不知道如何对第三列的值求和。
任何帮助将不胜感激。
【问题讨论】:
-
你有什么事情吗? ;)
-
只是沮丧.. 尝试了许多站点的许多示例。即使做简单的交叉表,我得到 42601 错误.. 类型不匹配
-
是的,但到目前为止你尝试过什么?
标签: sql postgresql crosstab