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的回答中给我的功能称作展示。 –