Не могу получить TOP и ORDER BY для работы в моем заявлении - PullRequest
0 голосов
/ 04 декабря 2018

Мне нужно отобразить Топ-n фильмов на основе их количества отзывов и перечислить их в порядке убывания, основываясь на отзывах, и я смог до сих пор это сделать:

string mySql = "SELECT Movies.MovieName, COUNT(Reviews.MovieID) AS 
NumberOfReviews FROM Reviews INNER JOIN Movies ON Movies.MovieID = 
Reviews.MovieID GROUP BY MovieName";
///Sets up the connection to the server 
OleDbConnection db = new OleDbConnection();
db.ConnectionString = FormMainMenu._DBConnectionInfo;
//open database
db.Open();
OleDbCommand cmd = new OleDbCommand(mySql, db);
//Creates a data set out of the data
OleDbDataAdapter adapter = new OleDbDataAdapter(mySql, db);
DataSet ds = new DataSet();
//Fills the table
adapter.Fill(ds);
DataTable dt = ds.Tables["TABLE"];      //Creates a datatable of all the movies in the database

BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = dt;
dataGridView1.DataSource = bindingSource;
adapter.Update(ds);
//close the database
db.Close();

Что я могуне работает, где поместить TOP только в список, скажем 5 или 10 и т. д. в DataTable, и заставить ORDER BY работать

Использование базы данных Access

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Top нельзя использовать для Oracle, вместо этого вы можете использовать row_number.

SELECT MovieName, NumberOfReviews
  FROM
  (
  SELECT MovieName, NumberOfReviews, 
         row_number() over (ORDER BY NumberOfReviews DESC) as rn
    FROM
    (
    SELECT m.MovieName, COUNT(r.MovieID) AS NumberOfReviews
      FROM Reviews r
     INNER JOIN Movies m
        ON m.MovieID = r.MovieID
     GROUP BY m.MovieName
    ) 
  )  
 WHERE rn <= 5;

Для DB Версия 12, предложение fetch может использоваться как:

SELECT m.MovieName, COUNT(r.MovieID) AS NumberOfReviews
  FROM Reviews r
 INNER JOIN Movies m
    ON m.MovieID = r.MovieID
 GROUP BY m.MovieName
 FETCH FIRST 5 ROWS ONLY; 
0 голосов
/ 04 декабря 2018

Вы можете попробовать ниже - это будет работать на сервере SQL

SELECT top 5 Movies.MovieName, COUNT(Reviews.MovieID) AS 
NumberOfReviews FROM Reviews INNER JOIN Movies ON Movies.MovieID = 
Reviews.MovieID GROUP BY MovieName
order by COUNT(Reviews.MovieID) desc

для оракула вы можете попробовать ниже

 select * from 
(SELECT Movies.MovieName, COUNT(Reviews.MovieID) AS 
    NumberOfReviews FROM Reviews INNER JOIN Movies ON Movies.MovieID = 
    Reviews.MovieID GROUP BY MovieName
    order by COUNT(Reviews.MovieID) desc
) where rownum<=10
...