如何使用join而不是使用子查询来实现此目的?

时间:2016-11-19 19:53:59

标签: sql sql-server tsql

如何更改此查询以使用join而不是子查询?

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

由于

3 个答案:

答案 0 :(得分:2)

另一种选择是使用窗口函数

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

答案 1 :(得分:1)

有一种方法可以通过以下方式进行连接:

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;

否则使用变量来存储该值

答案 2 :(得分:0)

您可以使用

上的联接来执行此操作
  • 使用CTE。
  • 使用派生表。
  • 助理观点。
  • 有助理临时表。
  • 加入分组子查询。

或可以使用:

  • 带变量。
  • 使用表格功能。
  • 交叉申请。

但你的qry是最清晰的解决方案。