我有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,我感到很困惑。
我使用以下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)
| 归档时间: |
|
| 查看次数: |
7469 次 |
| 最近记录: |