2

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

例子

从用户中选择 ID、名称

结果

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

现在,这些用户可以按最后访问、最后发布、发表的评论数或计算的参数进行排序。如果我有这样的选择,我怎么能订购:

SELECT Id, Name, function_last_access(Id) as f1, function_last_post(Id) as f2, function_calculate_parameters(Id) as f3 FROM Users

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

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

可以帮我按分区排序或类似的东西吗?

4

2 回答 2

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
于 2013-01-16T14:44:59.667 回答
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
于 2013-01-16T14:44:54.543 回答