如果最后一行被绑定,如何返回前三行

时间:2017-12-05 19:03:03

标签: sql sql-server

假设我的表包含这样的数据

  ID    MovieName                      Rating    
  --------------------------------------------
  1     The Shawshank Redemption       9.20
  2     The Godfather: Part II         9.00
  3     12 Angry Men                   8.90
  4     Pulp Fiction                   8.90
  5     The Good, the Bad and the Ugly 8.80

我想根据最高等级选择前三部电影,其中包含'12愤怒的男人'和'低俗小说'电影。所以查询应该返回4行而不是3行。

4 个答案:

答案 0 :(得分:4)

只需使用TOP WITH TIES

即可
SELECT TOP 3 WITH TIES ID, MovieName, Rating
FROM MyMoviesDB
ORDER BY Rating DESC

只有你必须使用ORDER BY

答案 1 :(得分:0)

尝试:

SELECT A.ID, A.MOVIENAME, A.RATING
FROM
(SELECT ID, MOVIENAME, RATING, DENSE_RANK() OVER (ORDER BY RATING DESC) AS R
FROM YOUR_TABLE) A
WHERE A.R <= 3
ORDER BY A.RATING DESC;

密集等级将重复相同的评级。因此,如果前三个排名中有一个排名不止一个,那么输出中将会有超过3个排名。

答案 2 :(得分:0)

您可能希望在moviesdb表格中选择评级在DISTINCT排名前3位评级中的排名顺序排序:

SELECT * 
  FROM moviesdb
 WHERE Rating IN (SELECT DISTINCT TOP 3 Rating 
                    FROM moviesdb 
                   ORDER BY Rating Desc)

答案 3 :(得分:-1)

Select * from Table_Name
ORDER BY Rating
LIMIT 4