SQL 查询以查找比赛中的获胜者

标签 sql sql-server-2008

我有一个查询返回给我的结果如下:

  Race   | Candidate | Total Votes | MaxNoOfWinners
    ---------------------------------------------------
    1      | 1         | 5000        | 3
    1      | 2         | 6700        | 3
    2      | 1         | 100         | 3
    2      | 2         | 200         | 3
    2      | 3         | 300         | 3
    2      | 4         | 400         | 3
    ...

我想知道是否可以编写一个查询来仅返回特定比赛的获胜者(基于 MaxNoOfWinners 和 TotalVotes)。所以对于上述我只会回来

Race   | Candidate | Total Votes | MaxNoOfWinners
---------------------------------------------------
1      | 1         | 5000        | 3
1      | 2         | 6700        | 3
2      | 2         | 200         | 3
2      | 3         | 300         | 3
2      | 4         | 400         | 3
...

最佳答案

这是一个解决方案...我没有测试,所以可能有错别字。这个想法是使用 SQL Server 的 RANK() 函数根据投票给出种族排名,不包括那些不符合标准的人。请注意,使用 RANK() 而不是 ROW_NUMBER() 将在结果中包含平局。

WITH RankedResult AS
(
  SELECT Race, Candidate, [Total Votes], MaxNoOfWinners, RANK ( )  OVER (PARTITION BY Race ORDER BY [Total Votes] DESC) AS aRank
  FROM Results
)
SELECT Race, Candidate, [Total Votes], MaxNoOfWinners
FROM RankedResult
WHERE aRANK <= MaxNumberOfWinners

关于SQL 查询以查找比赛中的获胜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102721/

相关文章:

sql - 如何使用 t-sql 更新 xml 变量中的 xml 属性值?

sql - 在 SSMS 中哪里可以检查 SQL Server 2008 中的用户定义表类型?以及如何在其中插入新列?

php - 从 MySQL 表中获取列名

sql - 为什么此 SQL 不能作为存储过程运行,但作为常规查询运行良好?

mysql - 如何选择sql中整个字段为大写的地方

sql-server - 仅更新 DateTime 的日期部分

sql - 非聚集索引在不同列类型上的性能

sql - 如何在sql中将字符串拆分为变量?

sql - 如何优化 SQLite ORDER BY rowid?

sql - 如何在同一表的一列中查找重复值而在另一列中查找不同值?