让我第一个承认我不是最擅长 SQL 的人,这个问题有点难过。
我需要创建一个算法,从表中返回前 5 条记录。前 5 条记录应通过将 3 列相加得出,并返回得分最高的前 5 条记录。
谁能给我一些关于我将如何做这种陈述的指示。
一段时间以来,我一直在搞乱一些代码,但我没有快速得到任何地方。
问候马克
让我第一个承认我不是最擅长 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
这可能会给你想要的效果:
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;
SQL Server 用于TOP
限制SELECT
语句返回的记录数。
SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESC
如果要处理领带,请添加子句WITH TIES
,TOP
SELECT TOP 5 WITH TIES Column1,
(Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESC
尝试结合使用“order by”和“limit”。
select *, (col1 + col2 + col3) as total
from MyTable
order by total desc
limit 5;
注意,这是 mysql 的语法,而不是 sql-server