2

組み合わせた並べ替えを組み合わせて適用したい結果セットがあります。

ユーザーからID、名前を選択

結果

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

これらのユーザーは、最終アクセス、最終投稿、作成されたコメントの数、または計算されたパラメーターによって並べ替えることができます。次のような SELECT がある場合、どうすれば注文できますか。

SELECT ID、名前、f1 として function_last_access(Id)、f2 として function_last_post(Id)、f3 として function_calculate_parameters(Id) FROM ユーザー

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 などを手伝ってもらえますか?

4

2 に答える 2

2

You can move the aliases to a subquery so you can refer to them in the 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 に答える