gpt4 book ai didi

sql - PostgreSQL 说 "return and sql tuple descriptions are incompatible"

转载 作者:行者123 更新时间:2023-11-29 11:16:03 26 4
gpt4 key购买 nike

我有以下数据:

ID  CLASS   VALUE
1 NHB 700905.7243
1 HBW 164216.1311
1 HBO 700905.7243
2 NHB 146023.3792
2 HBW 89543.2972
2 HBO 82152.072
3 NHB 1409818.328
3 HBW 220430.7922
3 HBO 323512.9391
4 NHB 48711.3814
4 HBW 163385.1575
4 HBO 363352.3441

我想重组为:

ID     HBO             HBW              NHB
1 700905.7243 164216.1311 700905.7243
2 82152.072 89543.2972 146023.3792
3 323512.9391 220430.7922 1409818.328
4 363352.3441 163385.1575 48711.3814

请注意,HBW、HBO 和 NHB 列中的值是总计(总和)。

这是我用来创建输出的脚本:

-- CREATE EXTENSION tablefunc;

SELECT *
FROM CROSSTAB
(
'SELECT _tlfd.id,
_tlfd."class",
_tlfd."value"
FROM public._tlfd
WHERE _tlfd."class" = ''HBW'' or _tlfd."class" = ''HBO'' or _tlfd."class" = ''NHB''
ORDER BY 1,2'
)
AS
(
"class" int,
"HBW" text,
"HBO" text,
"NHB" text,
--"Purpose" varchar,
"value" double precision
);

当我运行脚本时,我得到这个错误:

ERROR:  return and sql tuple descriptions are incompatible. 

我不确定这意味着什么以及如何更正错误。有人可以让我知道吗:

  1. 我在脚本中做错了什么?
  2. 我的脚本会产生所需的输出吗?

最佳答案

这对我适用于 Postgres 9.3:

SELECT *
FROM crosstab (
$$SELECT id, class, "value"
FROM _tlfd
WHERE class = ANY ('{HBW, HBO, NHB}')
ORDER BY 1,2$$
) AS <b>t</b> (
class int, -- needs a table alias!
"HBW" float8, -- resulting columns are double precision!
"HBO" float8,
"NHB" float8
-- <strike>"value" double precision</strike> -- column does not exist in result!
);

产生所需的输出。

基本变化

  • 表别名(粗体t)
  • 删除的多余列“value”
  • 数据列的正确数据类型( double 又名 float8)

剩下的就是品味和风格的问题了。不过,我不会使用 value 作为列名,因为它是 reserved word in SQL .

crosstab() 查询的基础:

关于sql - PostgreSQL 说 "return and sql tuple descriptions are incompatible",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22052334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com