需要帮助修复 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 bylimit

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 分层查询

Oracle SQL 新手需要帮助查找类似记录

oracle ebs r12报告的Oracle flex值层次结构SQL查询

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

Oracle Pl/sql 从多个查询中返回一个游标

SQL查询返回具有特定ID的所有项目[关闭]