2013-11-04 2 views
0

한 회원이 대여 한 영화 중 가장 많은 수의 영화와 해당 회원의 이름을 표시하는 쿼리를 작성한다고 가정합니다. 출력 열에 MAXIMUM NUMBER와 같은 의미있는 이름을 지정하십시오.Oracle SQL에서 MAX 번호를 찾기위한 쿼리 작성

이것은 내가 가지고있는 것입니다.

최대 개수는 같지만 출력은 이와 같아야합니다.

First Last Maximum_movies 
John Doe 4 

그러나 출력은

Maximum_movies 
4 

어떤 제안이? 이 같은

+0

'첫 번째 및 마지막'열은 무엇입니까? 이름? – Sebas

+0

이들은 구성원의 성 및 이름을 보유하는 열입니다. – user2461116

+1

이것은 PL/SQL이 아니며 This is SQL입니다. 친절하게 태그와 제목을 변경하십시오. [PL/SQL Query 작성] – ajmalmhd04

답변

0

뭔가 :

WITH CTE_CNT AS ( 
    SELECT first, last, COUNT(*) num 
    FROM 
     mm_member 
      JOIN mm_rental ON mm_rental.member_id = mm_member.member_id 
    GROUP BY first, last 
), 
SELECT cnt.first, cnt.last, maxrent.mx 
FROM (
    SELECT MAX(num) as mx FROM CTE_CNT 
    ) maxrent JOIN CTE_CNT AS cnt ON cnt.num = maxrent.mx 
; 
0

사용이 :

select first,last, maximum_movies 
from mm_member join mm_rental on 
     mm_rental.member_id = mm_member.member_id group by first, last where 
maximum_movies = (select max(maximum_movies) from (select count(*)maximum_movies 
     from mm_member join mm_rental on 
     mm_rental.member_id = mm_member.member_id group by first, last)); 
1

당신은 analytic rank이 방법을 사용할 수 있습니다. Demo on Fiddle

select memberid, 
     last, 
     first, 
     rental_count 
from (
select m.mm_memberid memberid, 
     m.mm_last  last, 
     m.mm_first first, 
     count(*) rental_count, 
     rank() over (order by count(*) desc) as count_ranking 
from mm_member m 
inner join mm_rental r on m.mm_memberid=r.mm_memberid 
group by m.mm_memberid, 
     m.mm_last, 
     m.mm_first 
) 
where count_ranking=1 
-1

1 단계 만 선택할 수 있습니다. 당신이 찾고있는 MAX가 아니라, 조인 된 테이블의 COUNT입니다.

SELECT TOP 1 
    M.member_id 
    , M.first 
    , M.last 
    , COUNT(R.*) MovieCount 
    FROM mm_member M 
    JOIN mm_rental R ON R.member_id = M.member_id 
    GROUP BY M.member_id, M.first, M.last 
    ORDER BY MovieCount DESC