0

1 人のメンバーがレンタルした映画の最大数とそのメンバーの名前を表示するクエリを作成するとします。出力列に、MAXIMUM NUMBER などの意味のある名前を付けます。

これは私が持っているものです。

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

最大数を取得しましたが、出力は次のようになります。

First  Last  Maximum_movies
John   Doe   4

しかし、出力は

Maximum_movies
4

助言がありますか?

4

4 に答える 4

1

このように分析ランクを使用できます。フィドルのデモ

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
于 2013-11-04T05:06:25.827 に答える
0

use this :

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));
于 2013-11-04T04:08:11.793 に答える
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
;
于 2013-11-04T04:04:38.073 に答える
-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
于 2013-11-04T05:19:45.420 に答える