我有这个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
答案 0 :(得分: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
答案 1 :(得分: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(*)
答案 2 :(得分: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