连续4列中的最大值

Har*_*tty 2 mysql sql

我有test_scores以下字段的表:

表架构:

  id (number)
  score1  (number)
  score2  (number)
  score3  (number)
  score4  (number)
Run Code Online (Sandbox Code Playgroud)

样本数据:

id score1 score2 score3 score4
1  10     05      30    50
2  05     15      10    00
3  25     10      05    15
Run Code Online (Sandbox Code Playgroud)

预期结果集:

id col_name col_value
1  score4   50
2  score2   15
3  score1   25
Run Code Online (Sandbox Code Playgroud)

对此有什么好的SQL?(我正在使用MySQL。)

原始要求未在行集中包含列名称。我可以使用以下SQL来获得结果:

SELECT   A.id, MAX(A.score) AS max_score
FROM     (
            SELECT id, score1 as score FROM test_scores UNION
            SELECT id, score2 as score FROM test_scores UNION
            SELECT id, score3 as score FROM test_scores UNION
            SELECT id, score4 as score FROM test_scores
          ) AS A
GROUP BY A.id
Run Code Online (Sandbox Code Playgroud)

但是由于在结果集中引入了col_name,我感到很困惑。

Har*_*tty 5

我使用以下SQL解决了这个问题:

SELECT id, GREATEST(score1, score3, score3, score4) AS col_value,
       CASE GREATEST(score1, score3, score3, score4) 
         WHEN score1 THEN 'score1'
         WHEN score2 THEN 'score2'
         WHEN score3 THEN 'score3'
         WHEN score4 THEN 'score4'
       END AS col_name
FROM test_scores

Please let me know if there is a better solution.
Run Code Online (Sandbox Code Playgroud)