sql - 如何在子查询结果上使用MAX()?

标签 sql oracle subquery aggregate-functions max

我是Oracle和SQL世界的新手。我的查询中有一个小问题,我一生无法解决,我花了几个小时尝试不同的方法,但无法获得预期的结果。所以这是我的查询:

SELECT *
from(Select membership.mem_desc,membership.mem_max_rentals,membership_history.mem_type,      
    count(membership_history.MEM_TYPE) as membership_count
    from membership_history
    JOIN membership ON membership.mem_type = membership_history.mem_type
    group by (membership_history.mem_type,membership.mem_desc,membership.mem_max_rentals)
    ) g
WHERE g.membership_count = (select MAX(membership_count) from g); 


因此,内部查询可以完美地工作并返回两个结果。现在,我拥有了这两个值,我试图找出如何返回具有最大Membership_count值的行,这是我不断陷入困境的地方。在上面的查询中,我尝试在where子句中使用MAX(),但在该选择内,我不断收到错误“找不到表”(意思是“ g”)。所以我的问题是如何在子查询的结果上使用MAX()函数?任何想法或建议将不胜感激!

最佳答案

您不需要找到最大值的子查询。
相反,您只需要在对行进行排序之后就需要第一行:

select * from (
  select 
    membership.mem_desc,
    membership.mem_max_rentals,
    membership_history.mem_type,      
    count(membership_history.MEM_TYPE) as membership_count
  from membership_history
  JOIN membership ON membership.mem_type = membership_history.mem_type
  group by (membership_history.mem_type,membership.mem_desc,membership.mem_max_rentals)
  ORDER BY 4 DESC  -- Added this line
) g
WHERE ROWNUM = 1. -- Added this line

关于sql - 如何在子查询结果上使用MAX()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182700/

相关文章:

mysql - 根据SQL中的属性删除重复行

sql - 为什么 select top ... order by 索引列仍然排序?

oracle - Oracle 中计算密集型函数的最快语言

php - Mysql 子查询失败,需要帮助 :)

mysql - 如何从两个表中获取数据?

c# - 另一个 LINQ Pivot 问题——将 SQL 脚本转换为 LINQ

c# - Oracle ORA-06502 PL/SQL : numeric or value error: character to number conversion error

SQL查询添加包含空值的两列的值?

mysql - 根据之前计算的字段计算MySQL Select字段

mysql - 优化缓慢的 mysql 查询