2

我有一個結果集,我想要應用組合的排序。以合併方式排序

SELECT ID,名稱來自用戶的

結果

Id Name 
1 Albert 
2 Alfred 
3 Carl 
4 David 
5 Ernest 

現在,這些用戶可以通過上次訪問,最後發表的帖子,許多意見提出或計算來orderd參數。我怎麼會下令,如果我有一個選擇是這樣的:

選擇ID,名稱,function_last_access(同上)爲F1, function_last_post(同上)爲F2,function_calculate_parameters(同上)爲F3 來自用戶的

Id Name  f1 f2 f3 
1 Albert 2 100 1,1 
2 Alfred 10 20 2 
3 Carl  0 15 5 
4 David 5 2 3 
5 Ernest 4 5 1 

最好是採取不同的有序列表,並結合後? 或把它們放在列中,然後應用規範化函數,然後對它們進行排序?

可以幫助我ORDER BY PARTITION或類似的東西?

+2

請出示預期的輸出,目前還不清楚你想達到的目標。 –

+1

我必須首先將功能標準化爲單一因素,以使它們具有可比性。就f1而言,top可以是10,但對於f2,top可以是0,f3可以是1,1 ...一旦規範化爲一個單一的比例,然後可以添加它們並對它們進行排序。 –

+0

還不清楚。 *請顯示預期的輸出* –

回答

2

您可以將別名的子查詢,所以你可以參考他們在order by

SELECT * 
FROM (
     SELECT Id 
     ,  Name 
     ,  function_last_access(Id) as f1 
     ,  function_last_post(Id) as f2 
     ,  function_calculate_parameters(Id) as f3 
     FROM Users 
     ) as SubQueryAlias 
order by 
     0.3 * f3 + 0.2 * f2 + 0.1 * f3 desc 
+0

如果我做出這樣的命令,我給f1比f2和f3更多的價值。我想按相同的標準和順序對價值進行標準化。 –

+1

如果函數返回一個數字,則可以使用加權平均值,並在答案中更新。並不是說用戶定義的函數通常在搜索算法中表現不佳。 CLR函數可能表現得不錯,但編寫和部署並不是微不足道的。 – Andomar

1

這會幫你嗎?

SELECT Id, Name, f1, f2, f3 
FROM 
(
    SELECT Id, 
    Name, 
    function_last_access(Id) as f1, 
    function_last_post(Id) as f2, 
    function_calculate_parameters(Id) as f3 
    FROM Users 
) f 
ORDER BY f1, f2, f3 
+0

如果我做出這樣的命令,我給f1比f2和f3更多的價值。我想按相同的標準和順序對價值進行標準化。 –

+0

我想我需要看你想要的結果 - 有點不清楚你想要什麼。 – sgeddes

+0

我不知道,直到我在Adomar的回答中給我的功能稱作展示。 –