18

私は 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); 

したがって、内側のクエリは完全に機能し、2 つの結果が返されます。これらの 2 つの値が得られたので、私が立ち往生し続けている Membership_count の最大値を持つ行を返す方法を見つけようとしています。上記のクエリでは、where 句で MAX() を使用しようとしましたが、その select 内で「テーブルが見つかりません」(「g」を意味する) というエラーが発生し続けます。私の質問は、サブクエリの結果に対して MAX() 関数をどのように使用するのですか? どんな考えや提案も大歓迎です!!!!!

4

7 に答える 7

14

最大値を見つけるサブクエリは必要ありません。
その代わり、 ; 行を並べ替えた後 、最初の行が必要です。

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
于 2013-04-24T05:07:07.450 に答える