【发布时间】:2014-01-13 13:50:21
【问题描述】:
我有一个这样的数据库:
|--------------------------------------------------------------------------|
| 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... ------------------------------------------------------------------|
我要做的是为任何给定的分数位置找到评分最高的名字。
当只有一个分数位置时我做得很好:
SELECT name FROM db ORDER BY Score2 DESC, Rating DESC LIMIT 1
...给我评分最高且得分最高的人。
我现在需要的是找到一种方法来组合两个或更多的分数列(总共有 23 个),但对于给定的任何分数组合,仍然返回评分最高的人。
例如,如果我想要 Score2 OR Score3 评分最高的人,即使他的评分低于 Bob Bobbing 的评分,执行上述查询也会给我 Joe Bloggs。
同样,如果我想要 Score1 OR Score2 OR Score4 评分最高的人,我仍然需要先指定其中一个分数进行排序。我需要一种方法来组合指定的所有 X 列的结果,然后按组合得分“列”排序,然后按评级。
【问题讨论】:
-
23 列?我认为最好添加带有分数和分值的新表。此外,“Score1 OR Score2 OR Score4 评分最高的人” 很难准确理解。您能否添加一些期望结果的样本?
-
不清楚您所说的“组合”列是什么意思。在您的“Score2 OR Score3”示例中,看起来 Joe 和 Bob 的分数相同,但 Bob 的评分更高。 combine 是否意味着“添加”? (因此,你 SUM() 相关字段?)你能简单地先按“评级”排序吗?
-
@poundifdef 没错,Joe 和 Bob 在 Score2 和 Score3 中都为零,因此选择继续评分。如果我先按评分排序,Marjorie 会排在首位,因为她的评分比其他任何人都高。我需要先考虑分数,然后是评分。如果指定的分数列中没有零的人,那么它必须考虑那些具有-10 的人,并从该池中选择评分最高的人。