SQL top 5 记录算法

标签 sql sql-server algorithm

让我第一个承认我不是最擅长 SQL 的人,这个问题有点难倒。

我需要创建一个算法来返回表中的前 5 条记录。前 5 条记录应通过将 3 列加在一起得出,并返回得分最高的前 5 条记录。

谁能给我一些关于如何做这种声明的指示。

一段时间以来,我一直在处理一些代码,但进展并不迅速。

问候 标记

最佳答案

我刚刚在 SQL Server Management Studio 中尝试了以下操作,它似乎可以满足您的要求:

SELECT TOP 5 * FROM
(
     SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
) tmp
ORDER BY Rank DESC

编辑
只是注意到您实际上不需要外部选择并且可以写:

SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
ORDER BY Rank DESC

这已在 SQL Server 2008 中测试。


它在内部选择中从名为 MyTable 的表中选择一列的值和其他三个列的总和。外部选择按所选总和对这些进行排序并取前 5 名。

例子:源表包含如下数据

Value1    Col1    Col2    Col3
  V0        0       0       0
  V1        1       0       0
  V2        2       0       0
  V3        3       9       0
  V4        4       9       0
  V5        5       9       0
  V6        6       9       10
  V7        7       9       10

内部选择将创建

Value1    Rank
  V0        0
  V1        1
  V2        2
  V3        12
  V4        13
  V5        14
  V6        25
  V7        26

外层的选择会返回

Value1    Rank
  V7        26
  V6        25
  V5        14
  V4        13
  V3        12

关于SQL top 5 记录算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655396/

相关文章:

sql - postgresql触发器函数中修改OLD为DELETE返回

php - 大型数据库的性能,更快的方法 : finding value with php or sql?

sql - T-SQL 查询 - 无游标的行迭代

java - 使用 Prims 算法从邻接列表中查找最小生成树,其中邻接列表位于字符串数组中

algorithm - 如何找到流动网络中每个接收器的最终存储量?

sql - 如果在join t-sql中

mysql - SQL 简单连接条件

sql - 选择具有连接计数记录的不同记录

c# - C#中SQL Server超时异常和SqlCommand超时异常的区别

algorithm - 减少关闭点