查询无法执行:滥用聚合:min()

时间:2016-05-31 06:53:21

标签: sql sqlite

为什么会出错?

select title, mx-mn 
from (select title, Rating.mID, max(stars) as mx, min(stars) as mn from Movie, Rating 
where Movie.mID = Rating.mID 
group by mx-mn, title)

我需要按评级差价(max-min)排序,然后按标题

排序

2 个答案:

答案 0 :(得分:0)

您的GROUP BY子句与GROUP BY max(starts)-min(stars)相同。

max()min()返回组中的最大/最小值。但是,GROUP BY子句中的表达式用于确定如何对行进行分组 - 尚不可能在尚不存在的组上计算聚合。

无论如何,要对行进行排序,您需要使用ORDER BY而不是GROUP BY。 但GROUP BY仍然需要为每部电影获得一行:

SELECT title,
       max(stars) - min(stars) AS spread
FROM Movie
JOIN Rating USING (mID)
GROUP BY mID
ORDER BY spread ASC, title;

答案 1 :(得分:0)

您应该通过这种方式改变群组(不要使用父查询别名)

select title, mx-mn 
from (select title, Rating.mID, max(stars) as mx, min(stars) as mn from Movie, Rating 
where Movie.mID = Rating.mID 
group by title, Rating.mID)