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
精彩评论