2013-03-27 224 views
1

讓我成爲第一個承認我不是SQL最偉大的人,而且這個問題已經有點難倒了。SQL top 5記錄算法

我需要創建一個算法,它將從表中返回前5條記錄。排名前5的記錄應該通過總結3個欄目來計算出來,並且應該返回得分最高的前5個。

任何人都可以給我一些指示,我將如何做這種聲明請。

我一直在搞亂一段時間的代碼,而且我沒有快速獲得任何地方。

問候 馬克

+0

乾杯每那些幫助我忘了說了其實我是越來越來自其他3個表格的數值,但是您提供的信息確實對我有幫助,而且這一切都是按我需要的方式工作的。再次歡呼 – markblue777 2013-03-27 11:37:28

回答

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 
+0

您應該在內部選擇中有秩序秩序。目前,這將以數據庫返回的順序給出前5個結果,然後對這5個DESC進行排序。 – CathalMF 2013-03-27 09:35:09

+0

無關緊要,因爲內部select會返回所有記錄。然後,外部選擇對這些進行排序並選擇前5位。 – 2013-03-27 09:41:20

+0

ORDER BY列別名在所有版本的SQL Server中都可以使用。 – 2013-03-27 11:04:43

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; 
+0

這是MySQL語法 – DrCopyPaste 2013-03-27 09:32:23

-1

嘗試 '通過順序' 和 '限制' 的組合。

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

注意,這是MySQL的語法,而不是SQL服務器

+0

爲什麼downvote? – SteveP 2013-03-27 09:32:47

+0

雖然這個概念是正確的,但是使用的語法是'MySQL'。 - 不是我的downvote。 – 2013-03-27 09:32:57

2

SQL Server使用TOP限制的記錄數的SELECT語句返回。

SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum 
FROM TableName 
ORDER BY totalSum DESC 
如果你想處理平局, TOP子句中添加 WITH TIES

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