1

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

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

谁能给我一些关于我将如何做这种陈述的指示。

一段时间以来,我一直在搞乱一些代码,但我没有快速得到任何地方。

问候马克

4

4 回答 4

3

我刚刚在 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
于 2013-03-27T09:28:08.370 回答
3

这可能会给你想要的效果:

MySQL

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

SQL

SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank 
FROM MyTable
ORDER BY Rank DESC;
于 2013-03-27T09:30:37.367 回答
2

SQL Server 用于TOP限制SELECT语句返回的记录数。

SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum 
FROM   TableName
ORDER  BY totalSum  DESC

如果要处理领带,请添加子句WITH TIESTOP

SELECT TOP 5 WITH TIES Column1, 
       (Column1 + Column2 + Column3) totalSum 
FROM   TableName
ORDER  BY totalSum  DESC
于 2013-03-27T09:31:16.517 回答
-1

尝试结合使用“order by”和“limit”。

select *, (col1 + col2 + col3) as total
  from MyTable
  order by total desc
  limit 5;

注意,这是 mysql 的语法,而不是 sql-server

于 2013-03-27T09:30:55.620 回答