0

我有这个SQL Server查询,我写了这个查询来查找中记录最少的电影标题RENTAL

运行时,它返回的结果集与我通过自己执行子查询获得的结果集相同。

换句话说,它返回所有电影标题及其对应的 RentalCount,而不是返回具有最小 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

感谢马丁史密斯介绍我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 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 回答
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 回答