需要帮助修复oracle sql查询以返回具有最大列值的行吗

sy5wg1nm  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(187)

当我尝试放映评论最多的电影时,我会出错。
我的问题如下:

SELECT movieName, Count(*) NoOfReviews 
FROM MovieReviews 
where  Count(*) NoOfReviews = (Select MAX(NoOfReviews)) 
Group by movieName

它一直给我一个错误,但我不知道为什么。如有任何意见,我们将不胜感激。

ogsagwnx

ogsagwnx1#

你可以 order by 以及 limit :

SELECT movieName, Count(*) NoOfReviews 
FROM MovieReviews 
GROUP BY movieName
ORDER BY NoOfReviews DESC
FETCH FIRST ROW WITH TIES

这给你的电影与大多数评论,包括领带。
请注意,行限制子句只能从oracle12开始使用。在早期版本中,一种选择是 RANK() :

SELECT movieName, NoOfReviews
FROM (
    SELECT movieName, Count(*) NoOfReviews, RANK() OVER(ORDER BY Count(*)) rn 
    FROM MovieReviews 
    GROUP BY movieName
) t
WHERE rn = 1
eimct9ow

eimct9ow2#

您可以使用 having 条款。也就是说,这是相当麻烦的事情 having 窗口函数是更好的解决方案:

SELECT *
FROM (SELECT movieName, Count(*) as NoOfReviews,
             MAX(count(*)) OVER ()  as max_NoOfReviews
      FROM MovieReviews 
      GROUP BY movieName
     ) mr
WHERE NoOfReviews = max_NoOfReviews

相关问题