对于“from子句”中的重复查询,如何在SQL中更好地执行此查询

对于“from子句”中的重复查询,如何在SQL中更好地执行此查询,sql,Sql,有没有办法通过删除select in from子句的重复模式来改进此查询?编写此查询的最佳有效方法是什么?我正在使用SQLite select abs(avg(ravg1) - avg(ravg2)) from (select avg(stars) as ravg1 from Movie M join Rating R on M.mID = R.mID group by R.mID having year <

有没有办法通过删除select in from子句的重复模式来改进此查询?编写此查询的最佳有效方法是什么?我正在使用SQLite

select abs(avg(ravg1) - avg(ravg2))
from (select avg(stars) as ravg1 
      from Movie M join
           Rating R
           on M.mID = R.mID 
      group by R.mID
      having year < 1980
     ), 
     (select avg(stars) as ravg2 
      from Movie M join
      Rating R on M.mID = R.mID 
      group by R.mID
      having year > 1980
     )

如果您希望获得1980年前后的评级差异,则可以使用条件聚合:

  select abs(avg(case when year < 1980 then stars end) -
             avg(case when year > 1980 then stars end)
            )
  from Movie M join
       Rating R
       on M.mID = R.mID;

你在使用什么数据库?你认为这个查询在做什么?我怀疑它在做你想做的事。我在那个问题上反复讨论。最后一个查询只返回一行,因此最后,我没有使用GROUPBY。