如何在 oracle sql 中使用 max on sum?
Posted
技术标签:
【中文标题】如何在 oracle sql 中使用 max on sum?【英文标题】:How to use max on sum in oracle sql? 【发布时间】:2022-01-13 11:54:19 【问题描述】:我正在执行一项任务,但遇到了特定问题。我是 SQL 新手,所以我正在向这个平台寻求支持。下面是2张表。第一个是 Theatre_play_table,第二个是门票销售表。 问题:列出总销售额最高的所有节目/戏剧的片名、导演和编剧。
Theatre_play_table
售票表
我已经粘贴了表格某些部分的屏幕截图。两个表中的 ID 列代表相同的信息。 Ticketssales 表中的最后一列是 Totalamount。
我尝试过以下查询; 选择 theatre_play.title, theatre_play.director, theatre_play.writer, sum(totalamount) 来自 theatre_play,总销售额 其中 theatre_play.id = totalsales.id 按 theatre_play.title、theatre_play.director、Theatre_play.writer 分组 按总和排序(总金额) desc 仅获取前 3 行;
当数据量很大时,上述方法没有用处。我想申请 max(sum(totalamount)) 但 oracle 报错了。
谁能帮我解决这个问题?
【问题讨论】:
您的解决方案对我来说看起来不错! 谢谢。是的,它有效,但我想在这里使用 max 函数但未能应用。 将销售聚合(play_id
)移动到子查询中并使用fetch first 1 rows with ties
,这将返回所有最畅销的节目。然后执行连接。如果您将示例数据作为文本提供,我将能够编写查询
【参考方案1】:
如果我理解正确,问题是要获得三个最高值吗? 然后尝试这样的事情:
select * from (
Select dpro.title, dpro.director, dpro.writer, sum(fth.totalamount)
from dpro
join fth on dpro.id = fth.id
group by dpro.title, dpro.director, dpro.writer
order by sum(totalamount) desc )
where rownum <=3
【讨论】:
感谢您的回复。任务是找到最高的销售额——不限于没有。的最高值。我根据输出使用了 3。我怎样才能让它在所有最高值出现的地方变成动态的。 @Dhwanil 您要么删除 where 子句以获取所有这些子句,要么根据值的数量对其进行调整 @SCCJS,所以如果我删除 where 子句,那么所有的值都会出现。在上述和之前的方法中,我查看了数据,然后决定只有 3 个最高值。当数据量很大时,这并不理想。问题是在不查看输出的情况下仅获得最高值。我希望这能详细说明问题。 @Dhwanil 查询从最大值开始对输出进行排序。如果您希望所有值删除 where 子句。如果你想要最高的 10 用 10 替换 3。你是说你想要“最高值”。对我来说,这不是很好的定义。这意味着有些内容不符合条件,不应查看。 @Dhwanil 当您说最高值时,该值是否等于最高值?那么如果我们有 100,100,100,10,它会返回 100,100,100?还是您想要大于平均值的值?除此之外,我们只会给你 x 个值以上是关于如何在 oracle sql 中使用 max on sum?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 oracle sql 中再次使用 MAX 和 MIN 函数获取值?
如何根据以下数据在 oracle SQL 上使用 max 函数? [关闭]
如何在 Oracle SQL 中不使用 distinct 选择从多个 max(case when) 派生的唯一行