从具有列名称的行获取MAX(SQL)

Pav*_*kov 3 google-bigquery

对不起,如果我的questin很简单,但我花了一天时间用谷歌搜索仍然无法弄清楚如何解决这个问题:

我有这样的表:

userId A B C D E
  1    5 0 2 3 2
  2    3 2 0 7 3
Run Code Online (Sandbox Code Playgroud)

我需要每行每列MAX列名:

userId MAX
  1     A
  2     D
Run Code Online (Sandbox Code Playgroud)

所有的想法将不胜感激!谢谢!我使用谷歌大查询,所以我的理解可能与MySQL不同,但如果你有MySQL的想法,我会尝试翻译.

Rag*_*ull 7

你可以使用GREATEST:

SELECT userid, CASE GREATEST(A,B,C,D,E)
                    WHEN A THEN 'A'
                    WHEN B THEN 'B'
                    WHEN C THEN 'C'
                    WHEN D THEN 'D'
                    WHEN E THEN 'E'
               END AS MAX
FROM TableName
Run Code Online (Sandbox Code Playgroud)

结果:

userId  MAX
1       A
2       D
Run Code Online (Sandbox Code Playgroud)

使用示例表,它看起来像:

SELECT userid, CASE GREATEST(A,B,C,D,E) 
                    WHEN A THEN 'A'                        
                    WHEN B THEN 'B'
                    WHEN C THEN 'C'
                    WHEN D THEN 'D'
                    WHEN E THEN 'E'
               END AS MAX
from (select  1 as userId,   5 as A, 0 as B, 2  as C, 3 as D, 2 as E),
(select  2 as userId,   3 as A, 2 as B, 0  as C, 7 as D, 3 as E)
Run Code Online (Sandbox Code Playgroud)