Sql server 按顺序平均条款

Sql server 按顺序平均条款,sql-server,tsql,sql-order-by,Sql Server,Tsql,Sql Order By,我有一个疑问: 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 如何(如果可能)以三个字段的平均值排序? 我想在获得三个字段的平均值后进行一次订单。例如: ... ORDER BY (Field2 +

我有一个疑问:

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
如何(如果可能)以三个字段的平均值排序? 我想在获得三个字段的平均值后进行一次订单。例如:

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


要按字段1+字段2+字段3的平均值排序,您可以添加一个新字段并按该字段排序

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
或者,您可以将查询放入子查询中,并根据外部查询中字段的总和进行排序

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

点什么?您的查询只返回一行。在任何字段中都可以为null吗?您希望如何处理这些问题?谢谢@sllev的反馈。这是针对两个查询还是仅针对其中一个查询?关于为什么会出现重大问题,您有没有参考资料,以便我进行研究?我认为@sllev相信您的第二个查询将运行聚合两次,这是错误的。@JNK:我假设order by将为每一列再计算一次平均值,我可以纠正我自己,这不是一个重大问题。我应该记得我的评论,我错了,因为ORDER BY适用于最终的select数据集,这将是每列简单的单整数,因此没有任何平均值计算只是删除了我的推荐,并意识到这可能会让JNK评论的访问者感到困惑,因为现在看起来他是在谈论这个特定的答案,如何恢复原始评论或如何纠正这种情况?我也删除了我的评论,所以我们现在回到开始的位置。好的,但我想在获得三个字段的平均值后下一个订单。
;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 
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
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