0

テーブル内のレコードの量が最も少ない映画のタイトルSQL Serverを見つけるために書いたこのクエリがあります。RENTAL

実行すると、サブクエリを単独で実行して取得した結果セットと同じ結果セットが返されます。

つまり、RentalCount が最小の 1 つの映画を返すのではなく、すべての映画のタイトルとそれに対応する RentalCount を返します。

SELECT B.Title, MIN(B.RentalCount) AS RentalCount
FROM (
    SELECT Movie.Title, Count(*) AS RentalCount
    FROM Rental
    JOIN Dvd ON Rental.RentalID=Dvd.DvdID
    JOIN Movie ON Dvd.Movieid=movie.MovieID
    GROUP BY Movie.Title
    ) B
GROUP BY B.Title
4

3 に答える 3

3

結果は正しいです。サブクエリは、レンタル テーブルの各タイトルの合計数を返します。また、タイトルでもグループ化したため、結果は外側のクエリでも同じになります。

フォローアップの質問: どのような結果を達成したいですか?

RENTAL テーブルのレコード数が最も少ない映画のタイトルを見つける

SELECT Movie.Title, Count(*) AS RentalCount
FROM Rental
        JOIN Dvd ON Rental.RentalID=Dvd.DvdID
        JOIN Movie ON Dvd.Movieid=movie.MovieID
GROUP BY Movie.Title
HAVING Count(*) = 
    (
        SELECT MIN(t_count)
        FROM
        (
            SELECT Count(*) t_count
            FROM Rental
            GROUP BY Title
        ) a
    )

更新 1

私を紹介してくれたMartin Smithに感謝しますTOP....WITH TIES

SELECT TOP 1 WITH TIES Movie.Title, Count(*) AS RentalCount
FROM Rental
        JOIN Dvd ON Rental.RentalID=Dvd.DvdID
        JOIN Movie ON Dvd.Movieid=movie.MovieID
GROUP BY Movie.Title
ORDER BY RentalCount DESC

SQLFiddle デモ

于 2012-10-15T03:00:17.670 に答える
0

特定の映画のタイトルを探している場合は、次のようにします。

SELECT Movie.Title, Count(*) AS RentalCount
    FROM Rental
    JOIN Dvd ON Rental.RentalID=Dvd.DvdID
    JOIN Movie ON Dvd.Movieid=movie.MovieID
    where Movie.Title='xyz'
    GROUP BY Movie.Title
于 2012-10-15T06:08:56.923 に答える
0

サブクエリなしでこれを行うことができました

SELECT TOP 1 Movie.Title, Count(*) AS RentalCount
FROM Rental
JOIN Dvd ON Rental.RentalID=Dvd.DvdID
JOIN Movie ON Dvd.Movieid=movie.MovieID
GROUP BY Movie.Title
ORDER BY Count(*) 
于 2012-10-15T03:08:33.653 に答える