当我运行以下查询时
select distinct A.movieID, A.avgStars from
(select mID as movieID, avg(stars) as avgStars
from Rating
group by mID) A
where A.avgStars <= all(select A.avgStars from A);
Run Code Online (Sandbox Code Playgroud)
我收到错误“无效的对象名称‘A’。”
你知道我为什么会得到这个吗?
谢谢!
Aar*_*and 10
您不能在同一范围内从子查询中引用别名。不过,您可以使用 CTE 来做到这一点;也许你的意思是:
;WITH Avgs AS
(
select mID as movieID, avg(stars) as avgStars
from Rating group by mID
)
SELECT movieID, avgStars FROM Avgs
WHERE avgStars <= ALL (SELECT AvgStars FROM Avgs);
Run Code Online (Sandbox Code Playgroud)
你也不应该需要DISTINCT
那里。
其他答案已经确定了问题以及如何解决它。
这是另一种进一步简化查询的方法:
select top (1) with ties
mID as movieID, avg(stars) as avgStars
from Rating
group by mID
order by avgStars ;
Run Code Online (Sandbox Code Playgroud)
根据您尝试申请的条件:
A.avgStars <= all(select A.avgStars from A)
Run Code Online (Sandbox Code Playgroud)
您的查询应该只返回平均值最低的条目。相同的逻辑可以用top (1) with ties
+以更简单的方式表达order by
,如上所示。
您正在尝试from
在新子查询中引用语句中的别名。
不过,您可以使用公共表表达式执行类似的操作。
;with a as (
select mID as movieID, avg(stars) as avgStars
from Rating
group by mID
)
select distinct A.movieID, A.avgStars
from a
where A.avgStars <= all(select A.avgStars from A);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3387 次 |
最近记录: |