Sql 如何通过连接而不是使用子查询来实现这一点?

Sql 如何通过连接而不是使用子查询来实现这一点?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何将下面的查询更改为使用联接而不是子查询 SELECT ID, Name, UnitPrice FROM Products WHERE UnitPrice < ( SELECT AVG( UnitPrice ) FROM Products ) ORDER BY UnitPrice DESC; 谢谢有一种使用join的方法,如下所示: SELECT T1.* FROM [dbo].[Table_1] AS T1 INNER JOIN ( SELECT AVG( Number )

如何将下面的查询更改为使用联接而不是子查询

SELECT ID, Name, UnitPrice
FROM Products
WHERE UnitPrice <
  ( SELECT AVG( UnitPrice ) FROM Products )
ORDER BY UnitPrice DESC;

谢谢

有一种使用join的方法,如下所示:

SELECT T1.* 
FROM [dbo].[Table_1] AS T1 
INNER JOIN ( SELECT AVG( Number ) as Number FROM [Table_1] ) AS T2 
ON T1.Number < T2.Number 
ORDER BY T1.UnitPrice DESC;

否则,请使用变量存储此值

您可以在连接打开时执行此操作

用CTE。 使用派生表。 辅助视图。 与助理临时表。 在分组子查询上使用join。 或者可以使用:

使用变量。 具有表格功能。 交叉应用。
但是您的qry是最清晰的解决方案。

另一个选项是使用窗口函数

;with cte as (
    SELECT ID 
         , Name
         , UnitPrice
         , AvgPrice = avg(UnitPrice) over (Order By (Select NULL))
     FROM Products
)
Select * from cte where UnitPrice<AvgPrice

这就是你要找的吗???从[dbo].[Table_1]中选择T1..[Table_1]作为T1内部连接,从[Table_1]中选择AVG Number作为T1上的T2。Number