SQL查找多行的仲裁结果

时间:2014-12-18 12:44:38

标签: sql sql-server tsql stored-procedures

每个足球比赛都有一个包含足球比分和多个参赛项目(来自不同来源)的数据库表。

我需要使用某种仲裁机制来选择当前得分,这样如果大多数来源同意得分,那么就是结果,如果存在平局,则从特定来源中选择得分(比如说,ScoreProviderID 1)的分数。

SCORES表看起来像这样:

ID  ScoreProviderID  MatchID  HomeScore  AwayScore
 1                1        1          1          1
 2                2        1          2          1       
 3                3        1          2          1 
 4                4        1          1          1 
 5                5        1          2          1 

对此进行查询应得出2:1的分数(或在HomeScore的查询中为2)。

我已经达到了这个问题:

SELECT HomeScore, COUNT(ID) AS Votes
FROM scores
GROUP BY HomeScore, MatchID
HAVING MatchID = 1

这会产生这样的结果:

HomeScore   Votes
----------- -----------
2           3
1           2

总之,如何查询最高投票得分,或者如果出现平局,则从特定提供商处获得得分?

1 个答案:

答案 0 :(得分:1)

您可以通过稍微修改聚合查询来执行此操作。使用order by按投票数排序结果。然后 - 对于有关系的情况 - 按键添加额外的顺序以处理得分提供者之间的偏好:

SELECT TOP 1 HomeScore, COUNT(ID) AS Votes
FROM scores
WHERE MatchId = 1
GROUP BY HomeScore
ORDER BY COUNT(ID) DESC,
         MAX(CASE WHEN ScoreProviderID = 3 THEN 1 ELSE 0 END) DESC;

请注意,我将HAVING子句切换为WHERE子句,因为WHERE效率更高。