gpt4 book ai didi

postgresql - 如何将查询结果分解为单独的列?

转载 作者:行者123 更新时间:2023-11-29 12:22:23 25 4
gpt4 key购买 nike

继我之前的问题之后:

Pixel values of raster records to be inserted in the table as columns

假设我的查询结果有 5300 行,结果如下:

+-------+ 
|value |
+-------+
| 15624 |
| 15899 |
| 56267 |
| 85955 |
+-------+

我希望它们在一个表中,前 53 行在 val1 列中,后 53 行在 val2 列中,依此类推。最后,我的表中将有 100 个新列。这可能吗?如果可以,我该如何实现?

最佳答案

这是一个 possibly somewhat saner approach using multi-dimensional arrays .

请永远、永远、永远、永远使用以下查询:

CREATE EXTENSION tablefunc;

SELECT * FROM crosstab(
'SELECT ''row1''::text, width_bucket(x, 1, 53001, 100), array_agg(x order by x)::integer[] from generate_series(1,53000) x GROUP BY 2'
) ct(
rowname text,
col1 integer[], col2 integer[], col3 integer[], col4 integer[], col5
integer[], col6 integer[], col7 integer[], col8 integer[], col9 integer[],
col10 integer[], col11 integer[], col12 integer[], col13 integer[], col14
integer[], col15 integer[], col16 integer[], col17 integer[], col18 integer[],
col19 integer[], col20 integer[], col21 integer[], col22 integer[], col23
integer[], col24 integer[], col25 integer[], col26 integer[], col27 integer[],
col28 integer[], col29 integer[], col30 integer[], col31 integer[], col32
integer[], col33 integer[], col34 integer[], col35 integer[], col36 integer[],
col37 integer[], col38 integer[], col39 integer[], col40 integer[], col41
integer[], col42 integer[], col43 integer[], col44 integer[], col45 integer[],
col46 integer[], col47 integer[], col48 integer[], col49 integer[], col50
integer[], col51 integer[], col52 integer[], col53 integer[], col54 integer[],
col55 integer[], col56 integer[], col57 integer[], col58 integer[], col59
integer[], col60 integer[], col61 integer[], col62 integer[], col63 integer[],
col64 integer[], col65 integer[], col66 integer[], col67 integer[], col68
integer[], col69 integer[], col70 integer[], col71 integer[], col72 integer[],
col73 integer[], col74 integer[], col75 integer[], col76 integer[], col77
integer[], col78 integer[], col79 integer[], col80 integer[], col81 integer[],
col82 integer[], col83 integer[], col84 integer[], col85 integer[], col86
integer[], col87 integer[], col88 integer[], col89 integer[], col90 integer[],
col91 integer[], col92 integer[], col93 integer[], col94 integer[], col95
integer[], col96 integer[], col97 integer[], col98 integer[], col99 integer[],
col100 integer[]
);

解决此问题的正确方法几乎肯定是在您的应用程序中。 SQL擅长很多事情。这不是其中之一,尤其是在 PostgreSQL 中,它对数据透视表的支持非常有限。在任何数据库中,这都是一件疯狂的事情。

就我而言,如果我必须使用查询来生成列列表,这表明系统被迫做一些它不太适合的事情:

select string_agg('col'||n||' integer[]',', ') FROM generate_series(1,100) n;

关于postgresql - 如何将查询结果分解为单独的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149421/

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