[英]How to get max value from row and column header in sql?
我想从包含其他几个列的最大值的行中提取 ID 列的值和列 header,并创建一个简单的表,其中 ID 列、名称、max(value) 和列 header 为 max(value)。
表看起来像这样。 大约 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 | ...
... | ..... | . | . | . | . | . | ...
我希望查询 output 如下:
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 尝试了多种解决方案,但没有一个能帮助解决这个问题。
任何指导或建议都会有帮助。
问候, 施里
您可以按如下方式使用greatest
:
select id, name,
greatest(a,b,c,d,e) as max_val,
case greatest(a,b,c,d,e)
when a then 'A' when b then 'B' when c then 'C' when d then 'D'
end as col_name_max
from your_table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.