SQL:将多个列合并为一个用于排序(仅限输出)

Stu*_*old 4 mysql sql sorting

我有这样一个数据库:

|--------------------------------------------------------------------------|
| NAME               |  SCORE1  |  SCORE2  |  SCORE3  |  SCORE4  |  RATING |
|--------------------------------------------------------------------------|
| Joe Bloggs         |  -50     |  0       |  -10     |  -30     |  67     |
| Bob Bobbing        |  -30     |  -10     |  0       |  -10     |  74     |
| Marjorie Doors     |  0       |  -10     |  -30     |  -50     |  88     |
| etc... ------------------------------------------------------------------|
Run Code Online (Sandbox Code Playgroud)

我想要做的是找到任何给定分数位置的最高评级名称.

当只有一个得分位置时,我会很好:

SELECT name FROM db ORDER BY Score2 DESC, Rating DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

...给了我得分最高的人,得分为2分.


我现在需要的是找到一种方法来组合两个或更多分数列(总共23个),但仍然返回给出的任何分数组合中评分最高的人.

例如,如果我想要得分最高的人获得Score2 OR Score3,那么执行上述查询会给我Joe Bloggs,即使他的评分低于Bob Bobbing的评分.

同样,如果我想要得分最高的人得分1或得分2或得分4,我仍然需要指定其中一个得分来排序.我需要一种方法来组合指定的所有X列的结果,然后按组合得分'列'排序,然后按评级排序.

use*_*181 8

您可能想要使用GREATEST()函数:

With two or more arguments, returns the largest (maximum-valued) argument.
Run Code Online (Sandbox Code Playgroud)

此代码段为您的示例中的score2和score3列执行了所需的操作:

SELECT name, GREATEST( score2, score3 ) AS max_score, rating
FROM db
ORDER BY max_score DESC , rating DESC
Run Code Online (Sandbox Code Playgroud)

按组合分数排序,如果它们相等则按结果排序(从最高到最低).

对于更多列,只需将它们作为参数添加到GREATEST()函数中.