需要帮助修复 Oracle SQL 查询以返回具有最大列值的行
Posted
技术标签:
【中文标题】需要帮助修复 Oracle SQL 查询以返回具有最大列值的行【英文标题】:Need help fixing Oracle SQL Query to return Rows with max column values 【发布时间】:2020-09-24 02:30:41 【问题描述】:当我尝试播放编号最多的电影时,我遇到了错误。评论。
我的查询如下:
SELECT movieName, Count(*) NoOfReviews
FROM MovieReviews
where Count(*) NoOfReviews = (Select MAX(NoOfReviews))
Group by movieName
它一直给我一个错误,但我不知道为什么。任何输入将不胜感激。
【问题讨论】:
【参考方案1】:您使用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
【讨论】:
【参考方案2】:你可以order by
和limit
:
SELECT movieName, Count(*) NoOfReviews
FROM MovieReviews
GROUP BY movieName
ORDER BY NoOfReviews DESC
FETCH FIRST ROW WITH TIES
这将为您提供评论最多的电影,包括关系。
请注意,行限制子句仅从 Oracle 12 开始可用。在早期版本中,一个选项是RANK()
:
SELECT movieName, NoOfReviews
FROM (
SELECT movieName, Count(*) NoOfReviews, RANK() OVER(ORDER BY Count(*)) rn
FROM MovieReviews
GROUP BY movieName
) t
WHERE rn = 1
【讨论】:
以上是关于需要帮助修复 Oracle SQL 查询以返回具有最大列值的行的主要内容,如果未能解决你的问题,请参考以下文章
oracle ebs r12报告的Oracle flex值层次结构SQL查询