繁体   English   中英

如何从 sql 中的行和列 header 获取最大值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM