每个足球比赛都有一个包含足球比分和多个参赛项目(来自不同来源)的数据库表。
我需要使用某种仲裁机制来选择当前得分,这样如果大多数来源同意得分,那么就是结果,如果存在平局,则从特定来源中选择得分(比如说,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
总之,如何查询最高投票得分,或者如果出现平局,则从特定提供商处获得得分?
答案 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
效率更高。