让我首先承认,我在SQL方面并不是最好的,这个问题有点难住了。
我需要创建一个算法,将返回表中的前5条记录。前5个记录应该通过将3列相加得到,并且应该返回得分最高的前5个记录。
有没有人能给我一些指点,告诉我如何做这样的陈述。
我摆弄一些代码已经有一段时间了,我不能很快地取得任何进展。
尊敬的马克
发布于 2013-03-27 17:28:08
我刚刚在SQL Server Management Studio中尝试了以下内容,它似乎可以满足您的要求:
SELECT TOP 5 * FROM
(
SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
) tmp
ORDER BY Rank DESC编辑
我只是注意到你实际上不需要外部select,可以这样写:
SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
ORDER BY Rank DESC这在SQL Server 2008中进行了测试。
它从内部select中名为MyTable的表中选择一列的值和其他三列的总和。外部select按选择的总和对它们进行排序,并取前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内部select将创建
Value1 Rank
V0 0
V1 1
V2 2
V3 12
V4 13
V5 14
V6 25
V7 26,则外部select将返回
Value1 Rank
V7 26
V6 25
V5 14
V4 13
V3 12发布于 2013-03-27 17:30:37
这可能会给你想要的效果:
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-27 17:31:17
SQL Server使用TOP限制SELECT语句返回的记录数。
SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESC如果想要处理tie,可以在TOP子句中添加WITH TIES,
SELECT TOP 5 WITH TIES Column1,
(Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESChttps://stackoverflow.com/questions/15655396
复制相似问题