开发者

Average in order by clause

I have this query:

SELECT 
   Field1
   AVG(Field2) as Field2, 
   AVG(Field3) as Field3, 
   AVG(Field4) as Field4 
FROM Table1
GROUP BY Field1
ORDER BY Field2 DESC, Field3 DESC, Field4 DESC

How to (if is possible) order with average of the three fields? I want to mak开发者_C百科e a single order after getting an average of three fields. For example:

...
ORDER BY (Field2 + Field3 + Field4) / 3


To sort on the average of Field1 + Field2 + Field3 you can either add a new field and sort on that.

select Field1,   
       avg(Field2) as AField2, 
       avg(Field3) as AField3, 
       avg(Field4) as AField4,
       avg(Field2+Field3+Field4) as Sort
from Table1
group by Field1
order by Sort desc

Or you can put your query in a sub-query and sort on the sum of the fields in the outer query.

select T.Field1,
       T.AField2,
       T.AField3,
       T.AField4
from (select Field1,   
             avg(Field2) as AField2, 
             avg(Field3) as AField3, 
             avg(Field4) as AField4
      from Table1
      group by Field1) as T
order by T.AField2 + T.AField3 + T.AField4 desc


SELECT 
   AVG(Field1) as AvgField1, 
   AVG(Field2) as AvgField2, 
   AVG(Field3) as AvgField3 
FROM Table1
   ORDER BY AvgField1 DESC, AvgField2 DESC, AvgField3 DESC

OR:

SELECT 
   AVG(Field1) as Field1, 
   AVG(Field2) as Field2, 
   AVG(Field3) as Field3 
FROM Table1
   ORDER BY AVG(Field1) DESC, AVG(Field2) DESC, AVG(Field3) DESC


;WITH Input(Field1, Field2, Field3)
AS
(
SELECT     
      AVG(Field1) as Field1,     
      AVG(Field2) as Field2,     
      AVG(Field3) as Field3  
    FROM Table1    
)
SELECT Field1, Field2, Field3 
FROM Input    
ORDER BY Field1 DESC, Field2 DESC, Field3 DESC 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜