【发布时间】:2021-01-19 08:32:09
【问题描述】:
我想从包含其他几个列的最大值的行中提取 ID 列的值和列标题,并创建一个简单的表,其中 ID 列、名称、max(value) 和列标题为 max(值)。
桌子看起来像这样。大约 160MM 行 x 50 列
id | name | A | B | C | D | E | ...
----+-------+---+---+---+---+---+----
101 | name1 | 4 | 5 | 1 | 3 | 3 | ...
102 | name2 | 3 | 1 | 2 | 4 | 2 | ...
103 | name3 | 2 | 5 | 3 | 2 | 1 | ...
104 | name4 | 1 | 3 | 4 | 1 | 6 | ...
... | ..... | . | . | . | . | . | ...
我希望查询输出如下:
id | name | max(value) | col_name of max(value)|
----+-------+-------------+-----------------------+
101 | name1 | 5 | B |
102 | name2 | 4 | D |
103 | name3 | 5 | B |
104 | name4 | 6 | E |
... | ..... | . | . |
我正在使用此代码:
CREATE TEMP TABLE xx AS (
SELECT id, name,
MAX(col) AS max(value),
col_name AS col_name of max(value)
FROM (
SELECT id, name, A AS col, 'A' col_name FROM table
UNION
SELECT id, name, B , 'B' col_name FROM table
UNION
...)
GROUP BY id,name,
col_name
但是,我得到了重复的值(~166MM 增加到~800MM 行)并且处理时间呈指数增长。我尝试了多种来自 google/stack overflow 的解决方案,但没有一个能帮助解决这个问题。
任何指导或建议都会有帮助。
问候, 大神
【问题讨论】:
-
如果您不以某种方式聚合 ID,那么所有行都将重复:不同 ID 的数量 x 列的数量。考虑删除 ID 列或以某种方式聚合,例如从具有最大列值的记录中获取 id
标签: sql amazon-redshift