我有这样一个数据库:
|--------------------------------------------------------------------------|
| 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列的结果,然后按组合得分'列'排序,然后按评级排序.
您可能想要使用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()函数中.
| 归档时间: |
|
| 查看次数: |
7401 次 |
| 最近记录: |