讓我成爲第一個承認我不是SQL最偉大的人,而且這個問題已經有點難倒了。SQL top 5記錄算法
我需要創建一個算法,它將從表中返回前5條記錄。排名前5的記錄應該通過總結3個欄目來計算出來,並且應該返回得分最高的前5個。
任何人都可以給我一些指示,我將如何做這種聲明請。
我一直在搞亂一段時間的代碼,而且我沒有快速獲得任何地方。
問候 馬克
讓我成爲第一個承認我不是SQL最偉大的人,而且這個問題已經有點難倒了。SQL top 5記錄算法
我需要創建一個算法,它將從表中返回前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
您應該在內部選擇中有秩序秩序。目前,這將以數據庫返回的順序給出前5個結果,然後對這5個DESC進行排序。 – CathalMF 2013-03-27 09:35:09
無關緊要,因爲內部select會返回所有記錄。然後,外部選擇對這些進行排序並選擇前5位。 – 2013-03-27 09:41:20
ORDER BY列別名在所有版本的SQL Server中都可以使用。 – 2013-03-27 11:04:43
這可能會給你想要的效果:
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;
這是MySQL語法 – DrCopyPaste 2013-03-27 09:32:23
嘗試 '通過順序' 和 '限制' 的組合。
select *, (col1 + col2 + col3) as total
from MyTable
order by total desc
limit 5;
注意,這是MySQL的語法,而不是SQL服務器
爲什麼downvote? – SteveP 2013-03-27 09:32:47
雖然這個概念是正確的,但是使用的語法是'MySQL'。 - 不是我的downvote。 – 2013-03-27 09:32:57
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
乾杯每那些幫助我忘了說了其實我是越來越來自其他3個表格的數值,但是您提供的信息確實對我有幫助,而且這一切都是按我需要的方式工作的。再次歡呼 – markblue777 2013-03-27 11:37:28