按组合排序

时间:2013-01-16 14:40:58

标签: sql sql-order-by aggregate-functions normalization sql-function

我有一个结果集,我想在其中应用组合排序。

实施例

  

SELECT Id,Name FROM Users

结果

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

现在,这些用户可以通过上次访问,最后发布,评论数量或计算参数进行排序。如果我有这样的SELECT,我怎么能订购:

  

SELECT Id,Name,function_last_access(Id)为f1,   function_last_post(Id)为f2,function_calculate_parameters(Id)为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

最好采用不同的有序列表并在之后将它们组合起来? 或者将它们放在列中然后应用规范化函数然后对它们进行排序?

可以帮我订购PARERTION或类似的东西吗?

2 个答案:

答案 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

答案 1 :(得分: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